【发布时间】:2016-01-15 20:54:43
【问题描述】:
我想在存储过程中使用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)
但我收到 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。所以请尽情享受吧。如果我能用解决方案处理这个错误,请告诉我。
我在这里要做的是,用 PIVOT 的Analyte 列获取SELECT 中的所有列。并且Pivot 应该在Analyte 和concentration 列的基础上执行。
标题中需要的Analyte列的值及其浓度应填写为行。
【问题讨论】:
-
这只是我的帖子。但它适用于
@cols。我已经解决了这个问题。现在是另一个问题。
标签: sql-server pivot