SQL 根据另一列连接列值并使用 GROUP BY 计算出现次数,还包括 CASE 子句

SQL concatenating columns values depending on another column and counting ocurrences with GROUP BY and also including CASE clauses

我正在尝试根据另一列的值 A 连接一列的值 Bs,同时计算所述值 A 的出现次数,最后 select 值 A 的离子取决于C 列和 D

的 CASE 子句的结果

如果我有这个table

COLUMN_A COLUMN_B COLUMN_C COLUMN D
NAME1 A 10 8
NAME2 B 20 15
NAME1 C 15 10
NAME4 D 23 20
NAME3 E 40 43
NAME2 F 10 14
NAME5 G 12 20

我只想select C 列的值大于 D 列的 A 列,计算它发生的次数,最后连接 B 列的值(如果适用),像这样:

COLUMN_A COLUMN_B COUNT
NAME1 A, C 2
NAME2 B 1
NAME4 D 1
NAME2 F 1

我已经通过下一个查询设法完成了几乎所有这些

SELECT 
    CASE WHEN columnc > columnd THEN [columna] ELSE 'Doesnt apply' END as ResultA,
    STUFF((
        SELECT ',' + columnb as 'data()' 
        FROM sometable 
        WHERE (columna = sometable.columna)
        FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'),1,2,'') AS ResultB,
    COUNT(*) AS count
FROM sometable 
GROUP BY 
    CASE WHEN columnc > columnd THEN [columna] ELSE 'Doesnt apply' END
HAVING COUNT(*) >= 1

但它会带来所有 B 列值,甚至是 A 列值不存在的值。

这需要一个简单的 where 子句和分组依据:

select column_a
     , string_agg(column_b, ', ') as listof_b
     , count(*) as match_count
from t
where column_c > column_d
group by column_a

请注意,在您最初的尝试中,for xml 子查询需要 and column_c > column_d in where 子句。