SQL Server 2008 R2:动态数据透视查询 - COALESCE未闭合的报价错误

时间:2016-07-28 21:21:38

标签: sql-server sql-server-2008 date dynamic pivot

我尝试了一些选项,但我似乎被卡在列名字符串上。在创建列名时,'似乎被截断了。你能帮我解决吗?

declare @columns as varchar(7)
declare @AMG_Pivot as varchar(max)

select @columns=
coalesce(@columns + ',','') + quotename ([MM-YYYY])
from
(
 SELECT DISTINCT convert(varchar(2), month ([MEMBER_MONTH_DAY])) + '-' + convert(varchar(4), year([MEMBER_MONTH_DAY])) as [MM-YYYY] 
    FROM Sindle.DBO.AMG_MM) A


    SET @AMG_Pivot = 
    '


SELECT PHS_ORG, PCP_Name, [PLAN_TYPE_C_NAME], [AGE_TYPE], '+@columns+', [PATIENT_ID] 
    FROM Sindle.DBO.AMG_MM



PIVOT (COUNT([PATIENT_ID]) FOR [MM-YYYY] IN ( '  +@columns+ ')) PT
Order By phs_org,PCP_NAME,PLAN_TYPE_C_NAME,AGE_TYPE'

EXEC (@AMG_Pivot)

这是我收到的错误消息

  

Msg 105,Level 15,State 1,Line 9   字符串'6-2016后)的未闭合引号)PT   通过phs_org,PCP_NAME,PLAN_TYPE_C_NAME,AGE_TYPE'订购。

= = = = = = = = = = = =

我正在尝试将我的支点转换为带有动态标题的支点,但我不断收到两个错误。

我的原始查询 - 此操作符合预期

SELECT *
FROM (  SELECT PHS_ORG, PCP_Name, [PLAN_TYPE_C_NAME], [AGE_TYPE], convert(varchar(2), month ([MEMBER_MONTH_DAY])) + '-' + convert(varchar(4), year([MEMBER_MONTH_DAY])) as [MM-YYYY], [PATIENT_ID] 
    FROM Sindle.DBO.AMG_MM) T
PIVOT (COUNT([PATIENT_ID]) FOR [MM-YYYY] IN ([6-2015],[7-2015],[8-2015],[9-2015],[10-2015],[11-2015],[12-2015],[1-2016],[2-2016],[3-2016],[4-2016],[5-2016],[6-2016])) PT
Order By phs_org,PCP_NAME,PLAN_TYPE_C_NAME,AGE_TYPE

不幸的是,当我尝试设置列名时,我遇到了两个错误

declare @columns as varchar(7)
declare @AMG_Pivot as varchar(max)

select @columns=
coalesce(@columns+',','') + quotename ('MM-YYY')
from
(
SELECT DISTINCT convert(varchar(2), month ([MEMBER_MONTH_DAY])) + '-' + convert(varchar(4), year([MEMBER_MONTH_DAY])) as [MM-YYYY] 
    FROM Sindle.DBO.AMG_MM) A


    SET @AMG_Pivot = '

    SELECT *
FROM 
(
SELECT PHS_ORG, PCP_Name, [PLAN_TYPE_C_NAME], [AGE_TYPE], '+@columns+', [PATIENT_ID] 
    FROM A) t



PIVOT (COUNT([PATIENT_ID]) FOR [MM-YYYY] IN ('+@columns+')) PT
Order By phs_org,PCP_NAME,PLAN_TYPE_C_NAME,AGE_TYPE'

EXEC (@AMG_Pivot) 

以下是我遇到的错误。我们将不胜感激。

Msg 105, Level 15, State 1, Line 11 Unclosed quotation mark after the character string 'MM-YYY)) PT Order By phs_org,PCP_NAME,PLAN_TYPE_C_NAME,AGE_TYPE'. Msg 102, Level 15, State 1, Line 11 Incorrect syntax near 'MM-YYY)) PT Order By phs_org,PCP_NAME,PLAN_TYPE_C_NAME,AGE_TYPE'.

如果我将EXEC语句更改为SELECT语句,我只需获取一个包含文本的字符串:

  

SELECT *   从   (     SELECT PHS_ORG,PCP_Name,[PLAN_TYPE_C_NAME],[AGE_TYPE],'+ @ columns +',[PATIENT_ID]           从A)t

     

[MM-YYYY] IN('+ @ columns +')的PIVOT(COUNT([PATIENT_ID]))PT   通过phs_org,PCP_NAME,PLAN_TYPE_C_NAME,AGE_TYPE

订购

image of select

0 个答案:

没有答案