Pivot中无限量的列

时间:2015-09-22 06:12:22

标签: sql pivot

我创建了一个PIVOT函数,将字符串转换为表格,这是我想要的输出。我想要的是我不需要逐个声明列。

以下是代码:

SELECT 
Name1, Name2, Name3
FROM
(
  SELECT 
  LEFT(CA.val,CHARINDEX('=',CA.val)-1) ColumnName,
  SUBSTRING(CA.val,CHARINDEX('=',CA.val)+1,100) Value
  FROM Z_SampleTable
  CROSS APPLY dbo.SplitSample(ProcessBody,'|') CA
) PD
PIVOT
(
  MAX(Value)
  FOR ColumnName IN (Name1, Name2, Name3)
) 
AS PT

有没有办法不需要声明每一列?例如,我有一个包含100列的表,有没有办法不声明那100列?

1 个答案:

答案 0 :(得分:1)

使用基于SQL的解决方案,您必需才能使用动态SQL解决方案。动态构建SELECT查询,自己制作PIVOT位(注意注入攻击!),然后使用EXEC(@dynamicSql)获取结果。类似于this answer to another question

I've done a fair share of research into this,如果您愿意超出纯SQL查询范围,您将开始获得更多选项。例如,SSRS非常适合动态调整规范化数据集,只要它们很小。对于使用SQL的更大场景,你需要更大的枪支,所有都需要对你的查询“聪明”(即动态构建它们)。

最后,对于更大的场景,您可以使用多语言持久性,并在无模式NoSQL解决方案中创建数据的副本。这些通常可以让您轻松完成此任务。

但最重要的是,对于临时SQL查询:您必须动态构建FOR ColName IN (...)位,然后EXEC(@myQuery)