【问题标题】:PIVOT and TEMP TABLE数据透视表和临时表
【发布时间】:2014-04-10 13:45:50
【问题描述】:

请你帮我把这个脚本放到一个临时表中。我已经为此工作了几个小时,它一直给我错误。

    DECLARE @PivotColumnHeaders VARCHAR(MAX)
    SELECT @PivotColumnHeaders = 
    COALESCE(@PivotColumnHeaders + ',[' + CAST(expansion as varchar(max)) + ']',
    '[' + CAST(expansio

    n as varchar(max))+ ']')

INTO #temp
FROM (Select distinct expansion from #CD4_VL2) results


DECLARE @PivotTableSQL NVARCHAR(MAX)
SET @PivotTableSQL = N'
select * from
(
select subjectID,expansion,printableValue1
from #CD4_VL2) as results


PIVOT

(MAX([printableValue1])
FOR [expansion] IN (
' + @PivotColumnHeaders + '
)
) as PivotTable

--order by Performed_Date_And_Time desc
'

Execute(@PivotTableSQL )

【问题讨论】:

  • 什么错误?如果它与语法有关,您是否尝试过 Printing @PivotTableSQL 而不是Executeing 它,然后检查代码?
  • 另外(虽然我怀疑这是问题所在)你应该知道this warning:“不要在 SELECT 语句中使用变量来连接值(即计算聚合值)。可能会出现意外的查询结果。这是因为 SELECT 列表中的所有表达式(包括赋值)不能保证每个输出行都只执行一次"
  • 根据 Damien 的评论,使用变异 COALESCE 执行 GROUP_CONCAT 的替代方法是将 STUFF 与 xml 一起使用,例如这里stackoverflow.com/a/11985946/314291

标签: sql pivot temp


【解决方案1】:

因为您已经在扩展列上进行了透视,所以 MAX(printableValue1) 的各个值现在将位于具有 Expansion 列中数据名称的列中。改成这样:

DECLARE @PivotColumnHeaders NVARCHAR(MAX) = 'Expansion1, Expansion2, Expansion3';

DECLARE @PivotTableSQL NVARCHAR(MAX);
SET @PivotTableSQL = 
N'select subjectID, ' + @PivotColumnHeaders 
+' from #CD4_VL2 
  PIVOT
(
  MAX([printableValue1])
  FOR [expansion] IN (' + @PivotColumnHeaders + ')) x';

Execute(@PivotTableSQL);

SqlFiddle here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2018-04-10
    相关资源
    最近更新 更多