SQL:在最终数据输出中合并重复行和 Case 语句值

SQL: Combine Duplicate Rows And Case Statement Values in Final Data Output

我正在处理 SQL 查询,该查询计算基于我正在使用的文本字段的重复记录:其中数据源 = 'Web' 或 'Internal'。我目前正在使用 case 语句来计算一条记录显示该值的次数。我的问题是如何将两个结果组合成一个记录,显示两者的计数。

我附上了关于我目前在做什么、我的输出是什么以及我希望最终结果是什么样子的查询。

SELECT id
,lastname
,firstname
,datasource
,CASE
WHEN (
    (Datasource = 'Web')
    )THEN Count(Datasource)
ELSE 0
    END WebData
,CASE
WHEN (
    (Datasource = 'Internal')
    ) THEN Count(Datasource)
ELSE 0
    END InternalData
,count(id) as countid

FROM Table


GROUP BY
id
,lastname
,firstname
,datasource

当前 returns:

12345   Jack    Boss    Internal    0   1   1
12241   Eric    Graves  Internal    0   1   1
13300   Su      Lynn    Web         1   0   1
13300   Su      Lynn    Internal    0   1   1
13914   Mark    Ross    Internal    0   2   2
14008   Mitch   Smith   Internal    0   1   1

我想 return:

12345   Jack    Boss    0   1   1
12241   Eric    Graves  0   1   1
13300   Su      Lynn    1   1   2
13914   Mark    Ross    0   2   2
14008   Mitch   Smith   0   1   1

谢谢

您需要为当前查询添加 outer select,在您要执行的列上使用 Group aggrigate.Just 添加 Outer select 到您的查询,

SELECT 
    data.id,
    data.lastname,
    data.firstname,
    SUM(data.WebData) AS WebData,
    SUM(data.InternalData) AS InternalData,
    SUM(data.countid) AS Countid
FROM
    (
       SELECT id,lastname,
              firstname,datasource,
              CASE WHEN Datasource = 'Web' THEN Count(Datasource) ELSE 0 END WebData,
              CASE WHEN Datasource = 'Internal' THEN Count(Datasource)ELSE 0 END InternalData,
             count(id) AS Countid

        FROM Table
        GROUP BY
                 id,lastname,firstname,datasource
     ) AS data
GROUP BY 
    data.id,data.firstname,data.lastname