ورود

View Full Version : سوال: Insert در جدول موقت



Delphi&Kylix_2939
جمعه 13 آذر 1388, 23:50 عصر
با سلام
چطور ميشه بدون استفاده از Cursor و While مثلا از عدد خاص تا يك عدد خاص بطور سريع در يك جدول ركورد اضافه بشه ورژن Sql هم مهم نيست.

محمد سلیم آبادی
شنبه 14 آذر 1388, 04:37 صبح
سلام دوست عزیز،
روش های Set_based مختلفی برای این منظور وجود دارد که باید روش recursive common table expression یا cte سریعترینش باشه. و روش دیگه ای که وجود داره Ranking Function است.




declare @t table (n int)
--Recursive Common Table Expression
;with cte1 (n) as
(
select 10
union all
select n+1
from cte1
where n >= 10 and n < 20
)
insert into @t
select * from cte1
OPTION (MAXRECURSION 0)

--Ranking Functions
;with cte2 as
(
select n = ROW_NUMBER() over(order by rand())
from sys.objects cross join sys.objects as c
)
insert into @t
select * from cte2
where n between 50 and 70

محمد سلیم آبادی
شنبه 14 آذر 1388, 07:36 صبح
قابل توجه دوستان!
روی سیستم خانه، دو روش فوق که در پست قبلی معرفی کردم رو با همدیگر مقایسه کردم

برای تولید 571787 عدد متوالی روش recursive cte در حدود 8 ثانیه به طول انجامید ولی روش Ranking/Cross Join فقط یک ثابته زمان برد!

اینم این دو query:




;with cte2 as
(
select n = ROW_NUMBER() over(order by rand())
from sys.objects cross join sys.objects as c
cross join sys.objects as cc
)
select * from cte2
--(571787 row(s) affected)

;with cte as
(
select n=1
union all
select cte.n+1
from cte
where n<571787
)
select * from cte
option (maxrecursion 0)
--(571787 row(s) affected)

Delphi&Kylix_2939
شنبه 14 آذر 1388, 10:15 صبح
دوست عزيز مي تونيد در موردش توضيح بيشتري بديد ممنون مي شم

AminSobati
شنبه 14 آذر 1388, 16:44 عصر
جهت رعایت کپی-رایت، این روش آقای Ben Gan هستش:



declare @Rows int
set @Rows=1000

;with
sq1 as (select 1 as c1 union all select 1),
sq2 as (select t1.c1 from sq1 t1 cross join sq1 t2),
sq3 as (select t1.c1 from sq2 t1 cross join sq2 t2),
sq4 as (select t1.c1 from sq3 t1 cross join sq3 t2),
sq5 as (select t1.c1 from sq4 t1 cross join sq4 t2),
sq6 as (select ROW_NUMBER() over(order by c1) as col1 from sq5)
select * from sq6
where col1<=@Rows

hamid1361k
یک شنبه 15 آذر 1388, 16:28 عصر
ممنون، ولی مگه این کدها و روشها هم کپی رایت داره؟

AminSobati
یک شنبه 15 آذر 1388, 19:27 عصر
دوست عزیزم منظور اون کپی-رایت که پیگرد قانونی داشته باشه نیست! انصاف حکم میکنه که یک روش زیبا و خلاقانه رو به اسم خودمون تموم نکنیم.

Delphi&Kylix_2939
یک شنبه 15 آذر 1388, 23:39 عصر
با سلام
با تشكر از همه دوستان يه مشكل ديگه اينكه
چطور ميشه بدون استفاده از Cursor و While مثلا ازيك تاريخ خاص تا تا يك تاريخ خاص خاص بطور سريع در يك جدول ركورد اضافه بشه ورژن Sql هم مهم نيست.
ممنون ميشم

محمد سلیم آبادی
یک شنبه 15 آذر 1388, 23:58 عصر
از query زیر استفاده کنین.


declare @t table
( i int, d date)

insert into @t
select i, d
from
(select ROW_NUMBER()over(order by (select 0)),null
from sys.objects) as d (i, d)
where i < 11

update @t
set d=dateadd(day,i,'2000/12/25')
output inserted.d as [Date]

/*
Date
----------
2000-12-26
2000-12-27
2000-12-28
2000-12-29
2000-12-30
2000-12-31
2001-01-01
2001-01-02
2001-01-03
2001-01-04
*/

Delphi&Kylix_2939
دوشنبه 16 آذر 1388, 00:15 صبح
از query زیر استفاده کنین.


declare @t table
( i int, d date)

insert into @t
select i, d
from
(select ROW_NUMBER()over(order by (select 0)),null
from sys.objects) as d (i, d)
where i < 11

update @t
set d=dateadd(day,i,'2000/12/25')
output inserted.d as [Date]

/*
Date
----------
2000-12-26
2000-12-27
2000-12-28
2000-12-29
2000-12-30
2000-12-31
2001-01-01
2001-01-02
2001-01-03
2001-01-04
*/


باتشكر ا راهنماييتون ول مي خوام تاريخ شمسي باشه مثل از 13880201 تا 13880301

محمد سلیم آبادی
دوشنبه 16 آذر 1388, 03:16 صبح
باتشكر ا راهنماييتون ول مي خوام تاريخ شمسي باشه مثل از 13880201 تا 13880301



create function d (@i int, @m int, @d char(8)) returns nvarchar(8)
as
begin
declare @year int, @month smallint, @day smallint
select @year = cast(substring(@d, 1, 4) as int),
@month = cast(substring(@d, 5, 2) as int),
@day = cast(substring(@d, 7, 2) as int);

if (@day+@i)%31 <> 0
begin
set @day=(@day+@i)%31
set @month=@i/31+@month--(@month+@m)%12
end
else
begin
select @day=31, @month+=@i/31
if (@month+@m)%12 = 0
set @month=1
end;

return cast(@year as char(4))+
substring(replicate('0',1)+cast(@month as char),len(@month),2)+
substring(replicate('0',1)+cast(@day as char),len(@day),2)

end

go


declare @t table
( i int, d char(10))

insert into @t
select i, dbo.d(i,(i/31),'13880201')
from
(select ROW_NUMBER()over(order by (select 0)),null
from sys.objects) as d (i, d)
where i < 40

select d from @t

محمد سلیم آبادی
پنج شنبه 03 دی 1388, 02:38 صبح
! انصاف حکم میکنه که یک روش زیبا و خلاقانه رو به اسم خودمون تموم نکنیم

اگر اون روش زیبا و خلاقانه است پس این دیگه چیه؟


;WITH Digits(i)
AS (SELECT i
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (0)) AS X(i))
SELECT (D3.i * 1000 + D2.i * 100 + D1.i * 10 + D0.i + 1) AS i
FROM Digits AS D0, Digits AS D1, Digits AS D2, Digits AS D3
ORDER BY i;

محمد سلیم آبادی
دوشنبه 27 اردیبهشت 1389, 02:15 صبح
خطاب به امین ثباتی،
چرا روش nested cte که BG معرفی کرده خلاقانه و clever هست؟ چون تونسته بدون جدول base و existed داده های متوالی عددی تولید کنه؟ یا اینکه نویسنده چند کتاب هست؟ (اگر جواب درستی به من دادین جایزه دارین :) )

من هر چی که فکر کردم نتونستم جواب این موضوع را پیدا کنم. ولی عیبی نداره این روش که در ادامه معرفی می کنم توسط خودم ابداع شده، پس اگر در آینده در فضای public این روش را دیدید بدونید مختص من بوده. که باید بگم خارج از سال 89 هم روش خوبیه :چشمک:


--My approach for publishing sequence numbers table
--Publishing One million numbers in just ONE SECOND!
WITH RecCTE (n) AS
(SELECT 1
UNION ALL
SELECT n + 1 FROM RecCTE WHERE n < 100),

Nums(n) AS
(SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1))
FROM RecCTE AS R1
CROSS JOIN RecCTE AS R2
CROSS JOIN RecCTE AS R3)
SELECT n
INTO ##global_temporary_table
FROM Nums

GO
CREATE CLUSTERED INDEX IX_0 ON ##global_temporary_table (n ASC);
GO

SELECT CAST(n AS VARCHAR(7)) + ','
FROM ##global_temporary_table
WHERE n BETWEEN 1 AND 1000
OR n BETWEEN 999000 AND 1000000
FOR XML PATH('');

/*
/*------------------------
SELECT CAST(n AS VARCHAR(7)) + ','
FROM ##global_temporary_table
WHERE n BETWEEN 1 AND 1000
OR n BETWEEN 999000 AND 1000000
FOR XML PATH('');
------------------------*/
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,3 7,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53, 54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70 ,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,8 7,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102, 103,104,105,106,107,108,109,110,111,112,113,114,11 5,116,117,118,119,120,121,122,123,124,125,126,127, 128,129,130,131,132,133,134,135,136,137,138,139,14 0,141,142,143,144,145,146,147,148,149,150,151,152, 153,154,155,156,157,158,159,160,161,162,163,164,16 5,166,167,168,169,170,171,172,173,174,175,176,177, 178,179,180,181,182,183,184,185,186,187,188,189,19 0,191,192,193,194,195,196,197,198,199,200,201,202, 203,204,205,206,207,208,209,210,211,212,213,214,21 5,216,217,218,219,220,221,222,223,224,225,226,227, 228,229,230,231,232,233,234,235,236,237,238,239,24 0,241,242,243,244,245,246,247,248,249,250,251,252, 253,254,255,256,257,258,259,260,261,262,263,264,26 5,266,267,268,269,270,271,272,273,274,275,276,277, 278,279,280,281,282,283,284,285,286,287,288,289,29 0,291,292,293,294,295,296,297,298,299,300,301,302, 303,304,305,306,307,308,309,310,311,312,313,314,31 5,316,317,318,319,320,321,322,323,324,325,326,327, 328,329,330,331,332,333,334,335,336,337,338,339,34 0,341,342,343,344,345,346,347,348,349,350,351,352, 353,354,355,356,357,358,359,360,361,362,363,364,36 5,366,367,368,369,370,371,372,373,374,375,376,377, 378,379,380,381,382,383,384,385,386,387,388,389,39 0,391,392,393,394,395,396,397,398,399,400,401,402, 403,404,405,406,407,408,409,410,411,412,413,414,41 5,416,417,418,419,420,421,422,423,424,425,426,427, 428,429,430,431,432,433,434,435,436,437,438,439,44 0,441,442,443,444,445,446,447,448,449,450,451,452, 453,454,455,456,457,458,459,460,461,462,463,464,46 5,466,467,468,469,470,471,472,473,474,475,476,477, 478,479,480,481,482,483,484,485,486,487,488,489,49 0,491,492,493,494,495,496,497,498,499,500,501,502, 503,504,505,506,507,508,509,510,511,512,513,514,51 5,516,517,518,519,520,521,522,523,524,525,526,527, 528,529,530,531,532,533,534,535,5
36,537,538,539,540,541,542,543,544,545,546,547,548 ,549,550,551,552,553,554,555,556,557,558,559,560,5 61,562,563,564,565,566,567,568,569,570,571,572,573 ,574,575,576,577,578,579,580,581,582,583,584,585,5 86,587,588,589,590,591,592,593,594,595,596,597,598 ,599,600,601,602,603,604,605,606,607,608,609,610,6 11,612,613,614,615,616,617,618,619,620,621,622,623 ,624,625,626,627,628,629,630,631,632,633,634,635,6 36,637,638,639,640,641,642,643,644,645,646,647,648 ,649,650,651,652,653,654,655,656,657,658,659,660,6 61,662,663,664,665,666,667,668,669,670,671,672,673 ,674,675,676,677,678,679,680,681,682,683,684,685,6 86,687,688,689,690,691,692,693,694,695,696,697,698 ,699,700,701,702,703,704,705,706,707,708,709,710,7 11,712,713,714,715,716,717,718,719,720,721,722,723 ,724,725,726,727,728,729,730,731,732,733,734,735,7 36,737,738,739,740,741,742,743,744,745,746,747,748 ,749,750,751,752,753,754,755,756,757,758,759,760,7 61,762,763,764,765,766,767,768,769,770,771,772,773 ,774,775,776,777,778,779,780,781,782,783,784,785,7 86,787,788,789,790,791,792,793,794,795,796,797,798 ,799,800,801,802,803,804,805,806,807,808,809,810,8 11,812,813,814,815,816,817,818,819,820,821,822,823 ,824,825,826,827,828,829,830,831,832,833,834,835,8 36,837,838,839,840,841,842,843,844,845,846,847,848 ,849,850,851,852,853,854,855,856,857,858,859,860,8 61,862,863,864,865,866,867,868,869,870,871,872,873 ,874,875,876,877,878,879,880,881,882,883,884,885,8 86,887,888,889,890,891,892,893,894,895,896,897,898 ,899,900,901,902,903,904,905,906,907,908,909,910,9 11,912,913,914,915,916,917,918,919,920,921,922,923 ,924,925,926,927,928,929,930,931,932,933,934,935,9 36,937,938,939,940,941,942,943,944,945,946,947,948 ,949,950,951,952,953,954,955,956,957,958,959,960,9 61,962,963,964,965,966,967,968,969,970,971,972,973 ,974,975,976,977,978,979,980,981,982,983,984,985,9 86,987,988,989,990,991,992,993,994,995,996,997,998 ,999,1000,999000,999001,999002,999003,999004,99900 5,999006,999007,999008,999009,999010,999011,999012 ,999013,999014,999015,999016,999017,999018,999019, 999020,999021,999022,999023,99902
4,999025,999026,999027,999028,999029,999030,999031 ,999032,999033,999034,999035,999036,999037,999038, 999039,999040,999041,999042,999043,999044,999045,9 99046,999047,999048,999049,999050,999051,999052,99 9053,999054,999055,999056,999057,999058,999059,999 060,999061,999062,999063,999064,999065,999066,9990 67,999068,999069,999070,999071,999072,999073,99907 4,999075,999076,999077,999078,999079,999080,999081 ,999082,999083,999084,999085,999086,999087,999088, 999089,999090,999091,999092,999093,999094,999095,9 99096,999097,999098,999099,999100,999101,999102,99 9103,999104,999105,999106,999107,999108,999109,999 110,999111,999112,999113,999114,999115,999116,9991 17,999118,999119,999120,999121,999122,999123,99912 4,999125,999126,999127,999128,999129,999130,999131 ,999132,999133,999134,999135,999136,999137,999138, 999139,999140,999141,999142,999143,999144,999145,9 99146,999147,999148,999149,999150,999151,999152,99 9153,999154,999155,999156,999157,999158,999159,999 160,999161,999162,999163,999164,999165,999166,9991 67,999168,999169,999170,999171,999172,999173,99917 4,999175,999176,999177,999178,999179,999180,999181 ,999182,999183,999184,999185,999186,999187,999188, 999189,999190,999191,999192,999193,999194,999195,9 99196,999197,999198,999199,999200,999201,999202,99 9203,999204,999205,999206,999207,999208,999209,999 210,999211,999212,999213,999214,999215,999216,9992 17,999218,999219,999220,999221,999222,999223,99922 4,999225,999226,999227,999228,999229,999230,999231 ,999232,999233,999234,999235,999236,999237,999238, 999239,999240,999241,999242,999243,999244,999245,9 99246,999247,999248,999249,999250,999251,999252,99 9253,999254,999255,999256,999257,999258,999259,999 260,999261,999262,999263,999264,999265,999266,9992 67,999268,999269,999270,999271,999272,999273,99927 4,999275,999276,999277,999278,999279,999280,999281 ,999282,999283,999284,999285,999286,999287,999288, 999289,999290,999291,999292,999293,999294,999295,9 99296,999297,999298,999299,999300,999301,999302,99 9303,999304,999305,999306,999307,999308,999309,999 310,999311,999312,999313,999314,9
99315,999316,999317,999318,999319,999320,999321,99 9322,999323,999324,999325,999326,999327,999328,999 329,999330,999331,999332,999333,999334,999335,9993 36,999337,999338,999339,999340,999341,999342,99934 3,999344,999345,999346,999347,999348,999349,999350 ,999351,999352,999353,999354,999355,999356,999357, 999358,999359,999360,999361,999362,999363,999364,9 99365,999366,999367,999368,999369,999370,999371,99 9372,999373,999374,999375,999376,999377,999378,999 379,999380,999381,999382,999383,999384,999385,9993 86,999387,999388,999389,999390,999391,999392,99939 3,999394,999395,999396,999397,999398,999399,999400 ,999401,999402,999403,999404,999405,999406,999407, 999408,999409,999410,999411,999412,999413,999414,9 99415,999416,999417,999418,999419,999420,999421,99 9422,999423,999424,999425,999426,999427,999428,999 429,999430,999431,999432,999433,999434,999435,9994 36,999437,999438,999439,999440,999441,999442,99944 3,999444,999445,999446,999447,999448,999449,999450 ,999451,999452,999453,999454,999455,999456,999457, 999458,999459,999460,999461,999462,999463,999464,9 99465,999466,999467,999468,999469,999470,999471,99 9472,999473,999474,999475,999476,999477,999478,999 479,999480,999481,999482,999483,999484,999485,9994 86,999487,999488,999489,999490,999491,999492,99949 3,999494,999495,999496,999497,999498,999499,999500 ,999501,999502,999503,999504,999505,999506,999507, 999508,999509,999510,999511,999512,999513,999514,9 99515,999516,999517,999518,999519,999520,999521,99 9522,999523,999524,999525,999526,999527,999528,999 529,999530,999531,999532,999533,999534,999535,9995 36,999537,999538,999539,999540,999541,999542,99954 3,999544,999545,999546,999547,999548,999549,999550 ,999551,999552,999553,999554,999555,999556,999557, 999558,999559,999560,999561,999562,999563,999564,9 99565,999566,999567,999568,999569,999570,999571,99 9572,999573,999574,999575,999576,999577,999578,999 579,999580,999581,999582,999583,999584,999585,9995 86,999587,999588,999589,999590,999591,999592,99959 3,999594,999595,999596,999597,999598,999599,999600 ,999601,999602,999603,999604,9996
05,999606,999607,999608,999609,999610,999611,99961 2,999613,999614,999615,999616,999617,999618,999619 ,999620,999621,999622,999623,999624,999625,999626, 999627,999628,999629,999630,999631,999632,999633,9 99634,999635,999636,999637,999638,999639,999640,99 9641,999642,999643,999644,999645,999646,999647,999 648,999649,999650,999651,999652,999653,999654,9996 55,999656,999657,999658,999659,999660,999661,99966 2,999663,999664,999665,999666,999667,999668,999669 ,999670,999671,999672,999673,999674,999675,999676, 999677,999678,999679,999680,999681,999682,999683,9 99684,999685,999686,999687,999688,999689,999690,99 9691,999692,999693,999694,999695,999696,999697,999 698,999699,999700,999701,999702,999703,999704,9997 05,999706,999707,999708,999709,999710,999711,99971 2,999713,999714,999715,999716,999717,999718,999719 ,999720,999721,999722,999723,999724,999725,999726, 999727,999728,999729,999730,999731,999732,999733,9 99734,999735,999736,999737,999738,999739,999740,99 9741,999742,999743,999744,999745,999746,999747,999 748,999749,999750,999751,999752,999753,999754,9997 55,999756,999757,999758,999759,999760,999761,99976 2,999763,999764,999765,999766,999767,999768,999769 ,999770,999771,999772,999773,999774,999775,999776, 999777,999778,999779,999780,999781,999782,999783,9 99784,999785,999786,999787,999788,999789,999790,99 9791,999792,999793,999794,999795,999796,999797,999 798,999799,999800,999801,999802,999803,999804,9998 05,999806,999807,999808,999809,999810,999811,99981 2,999813,999814,999815,999816,999817,999818,999819 ,999820,999821,999822,999823,999824,999825,999826, 999827,999828,999829,999830,999831,999832,999833,9 99834,999835,999836,999837,999838,999839,999840,99 9841,999842,999843,999844,999845,999846,999847,999 848,999849,999850,999851,999852,999853,999854,9998 55,999856,999857,999858,999859,999860,999861,99986 2,999863,999864,999865,999866,999867,999868,999869 ,999870,999871,999872,999873,999874,999875,999876, 999877,999878,999879,999880,999881,999882,999883,9 99884,999885,999886,999887,999888,999889,999890,99 9891,999892,999893,999894,999895,
999896,999897,999898,999899,999900,999901,999902,9 99903,999904,999905,999906,999907,999908,999909,99 9910,999911,999912,999913,999914,999915,999916,999 917,999918,999919,999920,999921,999922,999923,9999 24,999925,999926,999927,999928,999929,999930,99993 1,999932,999933,999934,999935,999936,999937,999938 ,999939,999940,999941,999942,999943,999944,999945, 999946,999947,999948,999949,999950,999951,999952,9 99953,999954,999955,999956,999957,999958,999959,99 9960,999961,999962,999963,999964,999965,999966,999 967,999968,999969,999970,999971,999972,999973,9999 74,999975,999976,999977,999978,999979,999980,99998 1,999982,999983,999984,999985,999986,999987,999988 ,999989,999990,999991,999992,999993,999994,999995, 999996,999997,999998,999999,1000000,

(2001 row(s) affected)
*/

AminSobati
دوشنبه 27 اردیبهشت 1389, 14:43 عصر
دوست عزیزم،
شما میتونین با ذخیره یک میلیارد رکورد در یک جدول دائمی، هر وقت نیاز داشتین از این Sequence حاضر و آماده استفاده کنین! دقیقا ابتکاری بودن روش Ben Gan به خاطر On the Fly بودنش هست.
روش شما تغییری چشمگیری در روش Ben Gan ایجاد نکرده، به جز تولید همون جدول اولیه که بعدا میخواد CROSS JOIN بشه. اگر این تغییر جزئی یک روش جدید محسوب میشه، پس من هم این روش رو به نام خودم باید ثبت کنم!!



DECLARE @X XML
SELECT @X=REPLICATE(CAST ('<a/>' AS VARCHAR(MAX)),32)

;WITH
L0(c)AS (SELECT 1 FROM @x.nodes('/a') tmp(c)),
L1 AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),
L2 AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),
Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L2)
SELECT top 1000000 n into #z FROM Nums


این روش هم در کسری از ثانیه یک میلیون رکورد تولید میکنه

محمد سلیم آبادی
دوشنبه 27 اردیبهشت 1389, 15:20 عصر
دقیقا ابتکاری بودن روش Ben Gan به خاطر On the Fly بودنش هست
من ادبیات خوبی ندارم و معنا و مفهوم on the fly را نمی دونم!
شاید معناش این باشه که روی هوا تولید میشه یا یه همچین چیزهایی.


روش شما تغییری چشمگیری در روش Ben Gan ایجاد نکرده، به جز تولید همون جدول اولیه که بعدا میخواد CROSS JOIN بشه
این موضوع که بدیهی است. من هم نگفتم تغییری چشمگیری اتفاق افتاده. حد اقل کار را بسیار ساده تر کرده!
اجتماع چند سطر و ضرب دکارتی کردنشان به طور مکرر و استفاده از تابعی برای تولید اعداد متوالی بازم روش ابتکاری نیست!
روش ابتکاری می خواهین این پست را ببینید: پنج شنبه 03 دی 1388 02:08 صبح

انتقادی که نسبت به شما وجود داره این هست که از حرفی که قبلا زدین به هیچ وجه منصرف نمی شین. و این برای من خیلی ... هست. نمونه ی بارزش این هست که گفتین عملگر TOP جز استاندارد های زبان SQL هست، ولی اینطور نیست این عملگر ویژه ی SQL Server طراحی شده! (می تونم براتون سند بیارم! نه اصلا کافیه یک سری به کتاب MCTS 70-433 بزنید، قسمت Logical Order)

انتقاد پذیری نشانه ی ضعف انسان نیست. هیچ کسی بدون اشتباه و خطا نیست. بطور نمونه من از Celko یک Query خواستم، برام در پاسخ این را فرستاد:
فقط کافیه به Query اشان دقت کنید در derived table اصلا ماده ی FROM وجود نداره (حسابی قاطی کرده!)


>> In the Student_Scores (that you have declared it) select the two highest scores for each exam_nbr? <<


SELECT X.*
FROM (SELECT exam_nbr, exam_score,
ROW_NUMBER()
OVER (PARTITION BY exam_nbr
ORDER BY exam_score DESC)
AS X (exam_nbr, exam_score, score_ranking)
WHERE score_ranking <= 2;


--CELKO--
if you want help with SQL, include DDL, clear specifications and follow basic data modeling rules.



یادم از پست یکی از کاربران خیلی فعال یک سایتی نقل قول گرفتم و گفتم Query های شما خیلی odd و non standard هستند، همین. کم مونده بود منو بخوره! اصلا جنبه ی انتقاد نداشت. به نظر من این تنها ضعف طرف رو نشون میده.

من نمی تونم حرفی را بدون منطق و پشتیوانه ی محکمی از کسی قبول کنم حالا می خواهد اون فرد خیلی ... باشه. قصد توهین یا جسارت یا چیز دیگری ندارم اینها انتقاد هایی هستن که من در این چنین محیطهایی از شما دارم. :لبخندساده:

الان کمی که بیشتر فکر کردم نگران این شدم که نکنه در جواب پستی با محتوای "برای سال 89 روشی خوبیه!" بفرستین. (زیاد جدی نگیرین)