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
.
我在创建 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
.