[英]Rolling Up Multiple Rows Into Single Row With Same Number Of Columns and Different Values
对于特定属性,我有一个 ID 列,其中包含不同的值。 我希望将 4 行转换为 1 行。 有多个记录
UNIQID | NAME | AGE | SOURCE
123 | John | 25 | StoreA
928 | John | 25 | StoreB
456 | John | 25 | StoreC
528 | John | 25 | StoreD
我需要如下 output -
UNIQID_A | UNIQID_B | UNIQID_C | UNIQID_D | NAME | AGE
123 | 928 | 456 | 528 | John | 25
我设法通过使用 sql 查询来达到以下结果,但我不确定如何将这些值汇总为 1
SELECT CASE WHEN Source = 'StoreA' THEN UNIQID END AS UNIQID_A,
CASE WHEN Source = 'StoreB' THEN UNIQID END AS UNIQID_B,
CASE WHEN Source = 'StoreC' THEN UNIQID END AS UNIQID_C,
CASE WHEN Source = 'StoreD' THEN UNIQID END AS UNIQID_D ,
ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY AGE) AS ROWNO,
*
FROM Table
上述查询的 Output 为
UNIQID_A | UNIQID_B | UNIQID_C | UNIQID_D | NAME | AGE | ROWNO
123 | NULL | NULL | NULL | John | 25 | 1
NULL | 928 | NULL | NULL | John | 25 | 2
NULL | NULL | 456 | NULL | John | 25 | 3
NULL | NULL | NULL | 528 | John | 25 | 4
感谢你的帮助。
您可以在条件语句上使用max
来聚合成一行,并按剩余列分组
SELECT Max(CASE WHEN Source = 'StoreA' THEN UNIQID END) AS UNIQID_A,
Max(CASE WHEN Source = 'StoreB' THEN UNIQID END) AS UNIQID_B,
Max(CASE WHEN Source = 'StoreC' THEN UNIQID END) AS UNIQID_C,
Max(CASE WHEN Source = 'StoreD' THEN UNIQID END) AS UNIQID_D,
NAME, AGE
FROM Table
Group By NAME, AGE
SELECT SUM(UNIQID_A) UNIQID_A, SUM(UNIQID_B) UNIQID_B, SUM(UNIQID_C) UNIQID_C, SUM(UNIQID_D) UNIQID_D, NAME, AGE FROM (
SELECT CASE WHEN Source = 'StoreA' THEN UNIQID END AS UNIQID_A,
CASE WHEN Source = 'StoreB' THEN UNIQID END AS UNIQID_B,
CASE WHEN Source = 'StoreC' THEN UNIQID END AS UNIQID_C,
CASE WHEN Source = 'StoreD' THEN UNIQID END AS UNIQID_D,
NAME, AGE
FROM Table) AS A
GROUP BY NAME, AGE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.