Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 r2 T\u SQL无法绑定多部分标识符错误_Sql Server 2008 R2_Pivot - Fatal编程技术网

Sql server 2008 r2 T\u SQL无法绑定多部分标识符错误

Sql server 2008 r2 T\u SQL无法绑定多部分标识符错误,sql-server-2008-r2,pivot,Sql Server 2008 R2,Pivot,我有一个运行良好的查询,但我正在尝试从中创建一个动态透视,以获得更好的最终结果表 我发现这件衣服穿得很好,但我不能把它和我的问题联系起来。 我的工作代码是: DECLARE @RangeDate as date set @RangeDate = (select distinct cd.weDate from CM_DATA cd where cd.year = 2015 and cd.week = 45) set @RangeDate = DATEADD(WW, -7, @RangeDate)

我有一个运行良好的查询,但我正在尝试从中创建一个动态透视,以获得更好的最终结果表

我发现这件衣服穿得很好,但我不能把它和我的问题联系起来。

我的工作代码是:

DECLARE @RangeDate as date
set @RangeDate = (select distinct cd.weDate from CM_DATA cd where cd.year = 2015 and cd.week = 45)
set @RangeDate = DATEADD(WW, -7, @RangeDate)

DECLARE @SQL as VARCHAR(MAX)
DECLARE @Columns AS VARCHAR(MAX)

SELECT @Columns = 
        COALESCE(@Columns + ', ','') + QUOTENAME(YearWeek)
FROM
(
    SELECT DISTINCT YearWeek
    FROM CM_DATA
    where weDate >= @RangeDate
) AS B

SET @SQL = '
WITH PivotData AS
(
select cd.Country
     , cd.Chain
     , cd.YearWeek
     , left(sm.Planogram, 2) as planogram
     , cd.StoreNo
     , cd.UID
     , cd.ShortCode
     , lp.Family
     , lp.ColourShort
     , pr.type
     , cd.Volume
     , ul.WOSOR
from vw_V2_UsrVarLst ul
left join CM_DATA cd on cd.Country = ul.CountryCode and cd.Chain = ul.Chain
left join V2_StoreMaster sm on sm.CountryCode = ul.CountryCode and sm.Chain = ul.Chain and sm.StoreNo = cd.StoreNo and sm.StoreNm = cd.StoreNm and cd.YearWeek between sm.YYYYWW and sm.YYYYWWEND
left join tblProducts pr ON pr.[COUNTRY CODE] = ul.CountryCode and pr.SKU = cd.UID
left join V2_LanguagePack LP ON LP.ShortCode = cd.ShortCode AND lp.Lang = ul.UsrLang
where cd.Country = ul.CountryCode and cd.Chain = ul.Chain and planogram is not null and left(cd.UID, 10) in (select lv.UID from V2_live lv where lv.CountryCode = ul.CountryCode and lv.Chain = ul.Chain and cd.YearWeek between lv.YYYYWW and lv.YYYYWWEND) and cd.weDate >= ' + @RangeDate + ' and sm.Planogram != ''Z''
)

select cd.Country
     , cd.Chain
     , left(sm.Planogram, 2) as planogram
     , cd.StoreNo
     , cd.UID
     , cd.ShortCode
     , lp.Family
     , lp.ColourShort
     , pr.type
     , cd.Volume
     , ' + @Columns + '
     , ul.WOSOR
FROM PivotData
PIVOT
(
    SUM(Volume)
    FOR YearWeek
    IN(' + @Columns + ')
) AS PivotResult'

EXEC (@SQL)
有人能认出上面是什么吗

韩元
Martin

尝试
选择@SQL
而不是
EXEC

您可能必须将输出设置为文本,并使用
查询选项(右键单击查询窗口)将文本输出的最大长度设置为更高的值(最大值为8192)

然后,您可以将动态SQL的结果粘贴到一个新的查询窗口中并在那里执行。您应该会收到一条语音错误消息,您甚至应该双击鼠标跳到正确的位置


祝你好运

尝试
选择@SQL
而不是
EXEC

您可能必须将输出设置为文本,并使用
查询选项(右键单击查询窗口)将文本输出的最大长度设置为更高的值(最大值为8192)

然后,您可以将动态SQL的结果粘贴到一个新的查询窗口中并在那里执行。您应该会收到一条语音错误消息,您甚至应该双击鼠标跳到正确的位置


祝你好运

好的,看起来生成的T-SQL太长了。当我使用你的方法时,我得到查询的一部分出现在消息选项卡中,并显示一条错误消息,其中第四个左连接被截断了一半。这正是我所说的。。。我想你是在SSMS工作。只需在查询窗口中单击鼠标右键并选择“选项”。在那里你可以找到
文本
,还有一些默认设置为256的
最大字符数
。将一个更高的值(8192)放入其中,然后重试……谢谢Shnugo,最后我将查询放入一个#Temp表中,然后在该表上运行pivot。这使得T-SQL更小并且能够完美运行。然后我删除了代码底部的#Temp表。@MartinLucas,很高兴看到你能解决你的问题。如果是我的回答让你找到了答案,那么你接受这个答案(投票柜台下面的支票)将是非常感谢的。你也可以投票支持这一点,但我认为你自己的声誉至少要达到15分。谢谢!好的,看起来生成的T-SQL太长了。当我使用你的方法时,我得到查询的一部分出现在消息选项卡中,并显示一条错误消息,其中第四个左连接被截断了一半。这正是我所说的。。。我想你是在SSMS工作。只需在查询窗口中单击鼠标右键并选择“选项”。在那里你可以找到
文本
,还有一些默认设置为256的
最大字符数
。将一个更高的值(8192)放入其中,然后重试……谢谢Shnugo,最后我将查询放入一个#Temp表中,然后在该表上运行pivot。这使得T-SQL更小并且能够完美运行。然后我删除了代码底部的#Temp表。@MartinLucas,很高兴看到你能解决你的问题。如果是我的回答让你找到了答案,那么你接受这个答案(投票柜台下面的支票)将是非常感谢的。你也可以投票支持这一点,但我认为你自己的声誉至少要达到15分。谢谢!