多部分标识符:在SQL存储过程中使用PIVOT时出错

Pra*_*oni 1 sql-server pivot

我想PIVOT在存储过程中使用来获取行.我所做的是:

DECLARE @cols NVARCHAR(MAX)
DECLARE @stmt NVARCHAR(MAX)

SET @cols = ''

SELECT @cols = @cols + Table3.vAnalyteName+ ','
                                        FROM Table3,Table5,Table6
                                        WHERE Table3.nBAChildProjectsNo = Table5.nBaSequenceScheduleHdrNo
                                              AND Table3.cStatusIndi <> 'D'

SET @cols = substring(@cols, 1, len(RTRIM(@cols)) -1 ) 

--SET @cols = stuff(@cols, 1, 2, '')

SET @stmt = 'SELECT
            Table1.nBaSequenceScheduleHdrNo,
            Table1.vSampleId,
            Table1.vSampleName,
            Table1.iSeqNo,
            Table1.vSampleType,
            Table2.vInjectionVolume,
            Table3.vAnalyteName,
            Table4.nConcentration,
            Table1.cStatusIndi

        FROM Table1

                INNER JOIN Table5
                      ON(Table5.nBaSequenceScheduleHdrNo =  Table1.nBaSequenceScheduleHdrNo
                         AND Table5.cStatusIndi <> ''D'')

                INNER JOIN Table2
                      ON(Table2.nBAchildProjectsNo = Table5.nBAchildProjectsNo
                         AND Table2.cStatusIndi <> ''D'')

                INNER JOIN Table3
                      ON(Table3.nBAchildProjectsNo = Table5.nBAchildProjectsNo
                         AND Table3.cStatusIndi <> ''D'')

                LEFT JOIN Table6
                     ON(Table6.nBAchildProjectsNo = Table5.nBAchildProjectsNo
                        AND Table6.nBAProjectAnalyteDtlNo = Table3.nBAProjectAnalyteDtlNo
                        AND Table6.cStatusIndi <> ''D'')

                LEFT JOIN Table4
                     ON(Table4.nBAAnalyteSampleHdrNo = Table6.nBAAnalyteSampleHdrNo
                        AND Table4.vSampleID =  Table1.vSampleId
                        AND Table4.cStatusIndi <> ''D'')

        PIVOT (
                SUM(Table4.nConcentration) FOR Table3.vAnalyteName IN ( ' + @cols + ' )
              ) AS PVT'
exec(@stmt)
Run Code Online (Sandbox Code Playgroud)

但我得到的错误Multipart Identifier如下:

消息8156,级别16,状态1,行
38''PVT'指定了'nBaSequenceScheduleHdrNo'列多次.
消息4104,级别16,状态1,行2
无法绑定多部分标识符"Table1.nBaSequenceScheduleHdrNo".
消息4104,级别16,状态1,行3
无法绑定多部分标识符"Table1.vSampleId".
消息4104,级别16,状态1,行4
无法绑定多部分标识符"Table1.vSampleName".
消息4104,级别16,状态1,行5
无法绑定多部分标识符"Table1.iSeqNo".
消息4104,级别16,状态1,行6
无法绑定多部分标识符"Table1.vSampleType".
消息4104,级别16,状态1,行7
无法绑定多部分标识符"Table2.vInjectionVolume".
......

我第一次使用PIVOT.所以请光着它.如果我能用解决方案处理这个错误,请告诉我.

我想在这里做的是,SELECTAnalytePIVOT 列获取所有列.并Pivot应根据Analyteconcentration列进行.

Analyte标题及其集中所需列的值应填充为行.

use*_*912 6

我知道现在回复已经太晚了,仅供其他人参考.

首先,在应用PIVOT之后,必须使用为PIVOT子句指定的别名来引用pivoted set的所有列.根据手册:

使用派生表,行集或表值函数或运算符子句(如PIVOT或UNPIVOT)时,子句末尾的必需table_alias是所有列的关联表名,包括返回的分组列.

如果别名SELECT列表中的所有列PVT都没有问题,或者你甚至可以删除所有列的别名也没关系.