sql查询显示输入数据

时间:2011-06-24 10:05:37

标签: sql-server

我想要一个SQL查询来显示以下数据

输入数据:

ID  GroupID     Data
 1     1        Hello
 2     1        Null
 3     1        Null
 4     1        World
 5     2        Niladri
 6     2        XXX
 7     2        Null
 8     2        PPP
 9     2        Null
10     2        Null
11     2        Null
12     2        LLL

作为

输出数据:

GroupID   MergedData
   1          Hello2World   
   2          NiladriXXX1PPP3LLL

我需要在GroupID上对数据进行分组,并将结果显示为Hello2World

-->Hello is related to GroupID 1
-->2 is count of NULLS
-->World is related to GroupID 1

同样适用于GroupID 2。

请建议?

由于

1 个答案:

答案 0 :(得分:0)

由于您没有提及您的DBMS,这是PostgreSQL的解决方案:

SELECT groupid, 
       string_agg(temp_data,'')
FROM (
  SELECT id,
         groupid, 
         data,
         CASE 
           WHEN data IS NULL 
              THEN cast(max(rn) over (partition by groupid, data) as varchar)
           ELSE data
         END AS temp_data,
         row_number() over (partition by groupid, data) as group_rn
  FROM (
    SELECT id,
           groupid,
           data,
           CASE 
             WHEN data IS NULL 
                THEN row_number() over (partition by groupid,data)
             ELSE NULL
           END AS rn
    FROM foo
  ) t1
  ORDER BY id
) t2 
WHERE group_rn in (0,1)
GROUP BY groupid

如果您的DBMS支持ANSI窗口函数并且类似于string_agg()函数,那么它也应该可以移植到您的DBMS。