gpt4 book ai didi

使用带有 varchar 列的 PIVOT 的 SQL Server 2008 R2 不起作用

转载 作者:行者123 更新时间:2023-12-03 16:28:26 25 4
gpt4 key购买 nike

我正在使用 SQL Server 2008 R2,我有这个简单的表

enter image description here

我想做的是从此表中进行选择并获得以下结果

x |      1     |       2     |      3
--+------------+-------------+------------
1 | first 1 | first 2 | first 3
2 | Second 1 | second 2 | second 3

我认为这可以用 PIVOT 来完成

我不太了解PIVOT以及我使用 PIVOT 和 Count() 找到的所有搜索结果. SUM() , AVG()这在我的表中不起作用,因为我正在尝试 PIVOTvarchar 上专栏

问题 我使用的功能是否正确?或者我还需要知道其他什么来解决这个问题吗?任何帮助将不胜感激

我试过了但没有成功

PIVOT(count(x) FOR value IN ([1],[2],[3]) )as total 
PIVOT(count(y) FOR value IN ([1],[2],[3]) )as total // This one is the nearest
of what i wand but instead of the column value values i get 0

这里是查询是否有人要测试它

CREATE TABLE #test (x int , y int , value Varchar(50))
INSERT INTO #test VALUES(1,51,'first 1')
INSERT INTO #test VALUES(1,52,'first 2')
INSERT INTO #test VALUES(1,53,'first 3')
INSERT INTO #test VALUES(2,51,'Second 1')
INSERT INTO #test VALUES(2,52,'Second 2')
INSERT INTO #test VALUES(2,53,'Second 3')
SELECT * FROM #test
PIVOT(count(y) FOR value IN ([1],[2],[3]) )as total
DROP TABLE #test

最佳答案

当您使用 PIVOT 函数时,IN 子句中的值需要与您选择的值相匹配。您当前的数据不包括 1、2 或 3。您可以使用 row_number() 为每个 x 赋值:

select x, [1], [2], [3]
from
(
select x, value,
row_number() over(partition by x order by y) rn
from test
) d
pivot
(
max(value)
for rn in ([1], [2], [3])
) piv;

参见 SQL Fiddle with Demo .如果每个 x 的值数量未知,那么您将需要使用动态 SQL:

DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(row_number() over(partition by x order by y))
from test
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

set @query = 'SELECT x,' + @cols + '
from
(
select x, value,
row_number() over(partition by x order by y) rn
from test
) x
pivot
(
max(value)
for rn in (' + @cols + ')
) p '

execute(@query);

参见 SQL Fiddle with Demo

关于使用带有 varchar 列的 PIVOT 的 SQL Server 2008 R2 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17753496/

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