我上午問了個問題,
假如表A:
ID NUMS
001 30
001 50
001 20
002 20
002 80
...
如何用一動態SQL語句得到表B?
表B:
ID NUMS
001 50
002 80
...
是很簡單;我是想知道另一方面對問題,只是沒把問題說清楚;再把題目具體一點:
假如表A:
ID NUMS
001 30
001 50
001 20
002 20
002 80
003 60
003 60
...
如何用一動態SQL語句得到表B?
表B:
ID NUMS
001 50
002 80
003 60
...笨方法是可以解決;但我想用一條動態的SQL語句得到結果(取每個ID最大的nums值,如果ID對應的nums值相同則取其中一筆就可以)
假如表A:
ID NUMS
001 30
001 50
001 20
002 20
002 80
...
如何用一動態SQL語句得到表B?
表B:
ID NUMS
001 50
002 80
...
是很簡單;我是想知道另一方面對問題,只是沒把問題說清楚;再把題目具體一點:
假如表A:
ID NUMS
001 30
001 50
001 20
002 20
002 80
003 60
003 60
...
如何用一動態SQL語句得到表B?
表B:
ID NUMS
001 50
002 80
003 60
...笨方法是可以解決;但我想用一條動態的SQL語句得到結果(取每個ID最大的nums值,如果ID對應的nums值相同則取其中一筆就可以)
INSERT @TB
SELECT '001', 30 UNION ALL
SELECT '001', 50 UNION ALL
SELECT '001', 20 UNION ALL
SELECT '002', 20 UNION ALL
SELECT '002', 80 UNION ALL
SELECT '003', 60 UNION ALL
SELECT '003', 60SELECT ID,MAX(NUMS) AS NUMS
FROM @TB
GROUP BY ID
/*
ID NUMS
---- -----------
001 50
002 80
003 60
*/
ID NO NUMS
001 a 30
001 b 50
001 c 20
002 a 20
002 b 80
003 a 60
003 b 60
...
如何用一動態SQL語句得到表B?
表B:
ID NO NUMS
001 b 50
002 b 80
003 a 60
...
或者
ID NO NUMS
001 b 50
002 b 80
003 b 60
FROM @TB
GROUP BY ID
INSERT @TB
SELECT '001' , 'a' , '30 ' union all
SELECT '001', 'b' , '50' union all
SELECT '001' , 'c' , '20' union all
SELECT '002' , 'a' , '20' union all
SELECT '002' , 'b' , '80' union all
SELECT '003' , 'a' , '60' union all
SELECT '003' , 'b', '60'
select A.ID,max(A.no) as no ,A.NUMS from @TB A join
(SELECT ID, MAX(NUMS) AS NUMS FROM @TB GROUP BY ID) B
on A.ID = B.id and A.NUMS = B.NUMS
group by A.ID,A.NUMS ===================
ID NO NUMS
001 b 50
002 b 80
003 b 60
(SELECT ID, MAX(NUMS) AS NUMS FROM @TB GROUP BY ID) B
on A.ID = B.id and A.NUMS = B.NUMS
group by A.ID,A.NUMS
ID NO NUMS
001 b 50
002 b 80
003 a 60