我创建了一个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列?
答案 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)
。