我找到了一个不错的脚本,该脚本可以为透视表动态按列名创建,但是我没有将分配的值重新返回到表中。这是我的出发桌。
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 ';
这将为您提供:
| DWG_DOC | EQIP_1 | EQIP_2 | PART | PRCS |
---------------------------------------------------------
| 34-1500-XXX | C0403 | C4054 | 34-1500-013 | 88-0000 |
问题内容: 我已经尽力理解如何在SQL中创建数据透视表,但是我无法对其进行管理! 我有以下几列: 拥有60万行数据。 我在下面的数据透视表中需要它们; StartHour作为列标题 作为行标题 作为数据 其中=‘1’作为过滤器。 数据透视表 我设法获得了以下代码,该方法有效,但仅给我date_1作为列标题,而不给我StartHour,或者将filter作为date_source =‘1’。 谢谢你
问题内容: 我试图获得一个带有动态列的数据透视表。当user_id是一个字符串时,它可以正常工作,但是如果它是一个int,那么它似乎会失败 到目前为止,在过去的问题帮助下,我得到的是: 参见:http : //sqlfiddle.com/#!2/eab24/1 我确定这很简单,但是我想念什么呢? 谢谢 问题答案: 由于值在其中,因此您要将它们设为列名,因此必须将值包装在反引号中 该SQL将看起来像
问题内容: 以下查询执行得很好… 输出看起来像 但是我的疑问是如何获取列的动态字段值。 那是 , 如何使用以上查询 问题答案: 要使PIVOT动态,您必须编写一个存储过程。 然后,您可以这样称呼它:
好的,我有一张像这样的桌子 现在我需要把它变成这样: 我一直在查看动态枢轴示例,但似乎我无法将它们放入我的场景中。 有人能帮忙吗?
问题内容: 我有以下SQL查询,其中创建的列不按顺序,我不太确定如何解决它。 我相信它与查询的这一部分有关系: 我曾尝试弄乱本主题中发布的答案,但无法运行查询。我希望有人能提供帮助。 编辑 我只是注意到我的行是乱序的,也想按[客户ID]进行排序。 问题答案: 您可以通过在设置字符串时添加来调整动态数据透视查询中字段的顺序: 更新:首先错过了,使用时必须先使用子查询,然后再使用: 如果您不能简单地使
问题内容: …枢轴((X)中B的总和(A)) 现在,B的数据类型为varchar2,X为一串由逗号分隔的varchar2值。 X的值是从同一表的列(例如CL)中选择不同的值。这种枢轴查询工作的方式。 但是问题是,每当CL列中有一个新值时,我都必须手动将其添加到字符串X中。 我尝试用从CL选择不同的值替换X。但是查询未运行。 我感觉到的原因是因为要替换X,我们需要用逗号分隔的值。 然后,我创建了一个