我想要一个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。
请建议?
由于
答案 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。