我有创建sql查询的问题。 我有一个表,其中包含列&数据:
标识COL1 COL2 COL3 COL4 COL5 COL6 COL7
1 FGA DSA 2018年1月1日7999 DB1 1 0
2 FGA DSA 2018年1月1日DB1 6999 0 0
3 FGA DSA 2018年1月1日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)我需要调整'其中COL6 = 1'。我怎样才能做到这一点?
答案 0 :(得分:2)
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
。