gpt4 book ai didi

sql - 动态 SQL Server 数据透视表

转载 作者:行者123 更新时间:2023-12-01 02:27:44 25 4
gpt4 key购买 nike

我找到了一个很好的脚本,它可以为我的数据透视表动态创建列名,但我没有将分配的值放回表中。这是我的起始表。

ORDER_ID    DSC_NAME        NAME
----------- --------------- -----------
2 34-1500-XXX DWG_DOC
3 C0403 EQIP_1
4 C4054 EQIP_2
1 34-1500-013 PART
0 88-0000 PRCS

我运行这个 SQL 来生成我想要在我的数据透视表中的列
DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct
',' + QUOTENAME(NAME)
FROM test
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

这给了我以下输出
[DWG_DOC],[EQIP_1],[EQIP_2],[PART],[PRCS]

当我为数据透视表运行动态 SQL 时
SET @query = 'SELECT ' + @cols + ' from 
(
SELECT ORDER_ID,DSC_NAME
FROM test
) x
pivot
(
MIN(ORDER_ID)
for DSC_NAME in (' + @cols + ')
) p '

execute(@query)

我看到这个结果...
DWG_DOC     EQIP_1      EQIP_2      PART        PRCS
----------- ----------- ----------- ----------- -----------
NULL NULL NULL NULL NULL

我尝试了几种不同的选择,但我没有想出一个解决方案来解决为什么这不起作用。

所需的输出将是 ORDER_ID 列顺序正确的地方
PRCS       PART           DWG_DOC        EQIP_1    EQIP_2    
---------- -------------- -------------- --------- ---------
88-0000 34-1500-013 34-1500-XXX C0403 C4054

但这也适用于我的应用程序。
DWG_DOC        EQIP_1    EQIP_2    PART           PRCS
-------------- --------- --------- -------------- -----------
34-1500-XXX C0403 C4054 34-1500-013 88-0000

最佳答案

删除 ORDER_ID从选择中,然后选择列 name :

SET @query = 'SELECT ' + @cols + ' from 
(
SELECT ORDER_ID, DSC_NAME -- <--- you didn't select the name here
FROM test
) x
pivot
(
MIN(ORDER_ID)
for DSC_NAME in (' + @cols + ')
) p '

并使用 MAX(DSC_Name)而不是 MIN(ORDER_ID) .像这样:
SET @query = 'SELECT '+ @cols + ' from 
(
SELECT DSC_NAME, Name
FROM test
) x
pivot
(
MAX(DSC_Name)
for NAME in (' + @cols + ')
) p ';

SQL Fiddle Demo

这会给你:
|     DWG_DOC | EQIP_1 | EQIP_2 |        PART |    PRCS |
---------------------------------------------------------
| 34-1500-XXX | C0403 | C4054 | 34-1500-013 | 88-0000 |

关于sql - 动态 SQL Server 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15042663/

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