我上午問了個問題,
假如表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值相同則取其中一筆就可以)

解决方案 »

  1.   

    DECLARE @TB TABLE([ID] VARCHAR(3), [NUMS] INT)
    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
    */
      

  2.   

    不好意思,題目還少了個字段
    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 
      

  3.   

    SELECT ID,MAX(NO) AS NO,MAX(NUMS) AS NUMS
    FROM @TB 
    GROUP BY ID
      

  4.   

    DECLARE @TB TABLE([ID] VARCHAR(3), no varchar(10),[NUMS] INT)
    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 
      

  5.   

    select  A.ID,mix(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 a  60