我想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.所以请光着它.如果我能用解决方案处理这个错误,请告诉我.
我想在这里做的是,SELECT用AnalytePIVOT 列获取所有列.并Pivot应根据Analyte和concentration列进行.
Analyte标题及其集中所需列的值应填充为行.
我知道现在回复已经太晚了,仅供其他人参考.
首先,在应用PIVOT之后,必须使用为PIVOT子句指定的别名来引用pivoted set的所有列.根据手册:
使用派生表,行集或表值函数或运算符子句(如PIVOT或UNPIVOT)时,子句末尾的必需table_alias是所有列的关联表名,包括返回的分组列.
如果别名SELECT列表中的所有列PVT都没有问题,或者你甚至可以删除所有列的别名也没关系.
| 归档时间: |
|
| 查看次数: |
1291 次 |
| 最近记录: |