0

我尝试实现以下 SQL 代码(SQL Server 2008),但在尝试使用我之前帖子中的类似代码对表进行 PIVOT 时不断遇到语法问题,我很难过 。

http://sqlfiddle.com/#!3/100bd/4

错误:

',' 附近的语法不正确:DECLARE @query AS NVARCHAR(MAX), @colsPivot as NVARCHAR(MAX) select @colsPivot = STUFF((SELECT ',' + quotename('MEM'+ cast(MEMPER_Instance as varchar(10)) )+' '+REPLACE(c.name, '会员Count ) ) u ) x1 pivot ( max(value) for col in ('+ @colspivot +') ) p ; select * from #temp' exec(@query)

如何识别问题?

4

2 回答 2

1

您的一个选择语句中连续有两个逗号

select ahs_id,
       MEMPER_Instance,         
       ,cast (MEMPER_MinValue as float) MinValue

第一次施法前加逗号,施法时加逗号,施法as as float))加逗号

select ahs_id,
             MEMPER_Instance,         
             ,cast (MEMPER_MinValue as float) MinValue
             ,cast (MEMPER_MaxValue as as float)) MaxValue
             ,cast (MEMPER_AvgValue as float) AvgValue
             ,cast (MEMPER_MedianValue as float) MedianValue
             ,cast (MEMPER_Count as as float) Count

修复这 4 个错误,它在小提琴上运行

于 2013-04-11T21:30:14.423 回答
1

您的脚本有几个错误。

  • 之后你的子查询中有一个额外的逗号MEMPER_Instance,
  • 您在转化中as多次重复float

脚本应该是:

select * from MEM_TEMP;

DECLARE @query  AS NVARCHAR(MAX),
    @colsPivot as  NVARCHAR(MAX)

select @colsPivot = STUFF((SELECT ',' 
                      + quotename('MEM'+ cast(MEMPER_Instance as varchar(10))+'_'+REPLACE(c.name, 'MEMPER_', ''))
                    from MEM_TEMP t cross apply sys.columns as C
                    where C.object_id = object_id('MEM_TEMP') 
                    and C.name not in ('MEMPER_Instance','AHS_ID')
                    group by t.MEMPER_Instance, c.name
                    order by t.MEMPER_Instance 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query 
  = ' SELECT * into ##temp
      from
      (
        select ahs_id,
          ''MEM''+cast(MEMPER_instance as varchar(10))+''_''+col col, 
          value
        from 
        (
          select ahs_id,
             MEMPER_Instance       
             ,cast (MEMPER_MinValue as float) MinValue
             ,cast (MEMPER_MaxValue as float) MaxValue
             ,cast (MEMPER_AvgValue as float) AvgValue
             ,cast (MEMPER_MedianValue as float) MedianValue
             ,cast (MEMPER_Count as float) Count

          from MEM_TEMP
        ) x
        unpivot
        (
          value
          for col in (
            MinValue,
            MaxValue,
            AvgValue,
            MedianValue,
            Count
          )
        ) u 
      ) x1
     pivot
     (
       max(value)
       for col in ('+ @colspivot +')
     ) p ; '


exec(@query)

select *
from ##temp

请参阅带有演示的 SQL Fiddle

于 2013-04-11T22:07:50.600 回答