繁体   English   中英

将多行汇总为具有相同列数和不同值的单行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM