gpt4 book ai didi

数据透视表中的 SQL 分组

转载 作者:行者123 更新时间:2023-12-04 16:14:23 34 4
gpt4 key购买 nike

我创建了一个数据透视表,但数据没有组合在一起。
任何人都可以帮助我获得所需的格式吗?

我为获取数据透视表而编写的查询:

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

最佳答案

传入 PIVOT 的任何列并且未聚合将成为分组的一部分,因此既然您确实有

from 
(
select *
from #cover2
) x

您将按 #cover 中的所有列进行分组除了 cover_earning_CountOffer_cover ,解决方案是只选择您需要的列(无论如何这是一个很好的经验法则):
set @query = 'SELECT Ref,offer_cover_id, ' + @cols2 + ' from 
(
select Ref,offer_cover_id, cover_earning_Count, Offer_cover
from #cover2
) x
pivot
(
SUM(cover_earning_Count)
for [Offer_cover] in (' + @cols + ')
) p'

顺便说一句,您可以在单个语句中设置两个列变量。我不认为它会增加很多性能提升,但每一点都有帮助:
SELECT  @Cols = STUFF(x.Cols.query('Col1').value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
@Cols2 = STUFF(x.Cols.query('Col2').value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM (
SELECT Col1 = ',' + QUOTENAME(c.[Offer_cover]),
Col2 = ',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
) x (Cols);

关于数据透视表中的 SQL 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51762342/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com