sql - 数据透视表中的 SQL 分组
问题描述
我创建了一个数据透视表,但数据没有组合在一起。谁能帮助我获得所需的格式?
我为获取数据透视表而编写的查询:
DECLARE @cols AS NVARCHAR(MAX), -- for pivot
@cols2 AS NVARCHAR(MAX), -- for select
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.[Offer_cover])
FROM #cover2 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
-- this is for the SELECT
SET @cols2 = STUFF((SELECT ',' + 'ISNULL(' + QUOTENAME(c.[Offer_cover]) + ', 0) ' + QUOTENAME(c.[Offer_cover])
FROM #cover2 c
GROUP BY c.[Offer_cover] -- changes here
ORDER BY c.[Offer_cover]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT Ref,offer_cover_id, ' + @cols2 + ' from
(
select *
from #cover2
) x
pivot
(
SUM(cover_earning_Count)
for [Offer_cover] in (' + @cols + ')
) p'
execute( @query)
实际结果:
Ref offer_cover_id 6667 13333 20000 26667 33333
42186_43252 1 0 0 0 0 1
42186_43252 1 0 0 0 0 0
42186_43252 1 1 0 0 0 0
42186_43252 1 0 1 0 0 0
42186_43252 1 0 0 0 2 0
42186_43252 1 0 0 0 0 0
42186_43252 1 0 0 0 0 0
42217_43252 1 0 1 0 0 0
42217_43252 1 0 0 1 0 0
42217_43252 1 0 0 0 0 0
42217_43252 1 0 0 0 0 0
42217_43252 1 0 0 0 0 0
42217_43252 1 0 0 0 0 0
42217_43252 1 0 0 0 0 0
42217_43252 1 0 0 0 0 0
42217_43252 1 0 0 0 0 0
42217_43252 1 0 0 0 0 0
期望的输出:
Ref offer_cover_id 6667 13333 20000 26667 33333
42186_43252 1 1 1 0 2 1
42217_43252 1 0 1 1 0 0
解决方案
您需要更改子查询中的x
查询。
因为使用 aselect *
您还可以从其中的该表中拖动其他字段。
其中一些不是每个 (ref, offer_cover_id) 元组唯一的。
所以改成:
select Ref, offer_cover_id, Offer_cover, cover_earning_Count
from #cover2
推荐阅读
- java - 如果我创建一个新的 javafx 应用程序,如何将 javafx intellij 模板更改为我自己的模板?
- ms-access - 有没有办法从 MS Access 中的另一个表中获取记录
- reactjs - 如何使用 Apollo Query 构造 React 代码,以便随机查询的对象数组不会随着状态变化而重新呈现?
- excel - 如何获取具有不同前缀的下一个序号?
- php - 在 laravel 中设置一天结束而不是 00:00:00
- java - Flutter 及时发送推送通知
- angular - WebStorm,Angular 6 - 找不到要前往的声明
- javascript - 数据表 - 整行数据编辑器不起作用
- apache-kafka - 使用 kafka 流定期(X 间隔)轮询来自 Kafka 主题的消息
- ios - 显示 UILabel 的文本