T SQL - 从分组结果中获取额外数据

TSQL - Get additional data from groupped result

我在创建 sql 查询时遇到问题。 我有一个 table,其中包含列和数据:

Id COL1 COL2 COL3 COL4 COL5 COL6 COL7
1 FGA DSA 2018-01-01 DB1 7999 1 0
2 FGA DSA 2018-01-01 DB1 6999 0 0
3 FGA DSA 2018-01-01 DB2 5999 1 1

我有一个问题:

SELECT t.COL3, t.COL1, t.COL2, STRING_AGG (c.COL4, ','), min(c.COL5)
FROM Offers as t
JOIN Offers as c on t.Id = c.Id
where t.COL3 between '2017-12-01' and '2017-12-31'
and t.COL1='FGA'
GROUP BY t.COL3, t.COL1, t.COL2

但是对于 STRING_AGG (c.COL4, ',') 我需要不同的值,对于 min(c.COL5) 我需要调节 'where COL6 = 1'。我怎样才能做到这一点?

STRING_AGG() 不(还)支持 DISTINCT。你可以用条件聚合做你想做的事:

SELECT t.COL3, t.COL1, t.COL2,
       STRING_AGG(CASE WHEN seqnum = 1 THEN c.COL4 END, ','), 
       MIN(CASE WHEN c.col6 = 1 THEN c.COL5 END)
FROM (SELECT t.COL1, t.COL2, t.COL3, c.COL4, c.COL5, c.col6,
             ROW_NUMBER() OVER (PARTITION BY t.COL3, t.COL1, t.COL2, t.COL4 ORDER BY c.COL4) as seqnum
      FROM Offers t JOIN
           Offers c 
           ON t.Id = c.Id
      WHERE t.GenerationId = 1 AND
            t.COL3 between '2017-12-01' and '2017-12-31' AND
            t.COL1 = 'FGA'
      GROUP BY t.COL3, t.COL1, t.COL2
     ) to
GROUP BY t.COL3, t.COL1, t.COL2;

注意使用 ROW_NUMBER() 来识别 COL4 的第一个值,然后用于 DISTINCT.