簡體   English   中英

動態列樞軸返回多行-SQL Server 2014

[英]Dynamic Columns Pivot returning multiple rows - SQL Server 2014

我正在嘗試在動態列上編寫PIVOT查詢。 它可以工作,但是返回多行。

我的查詢是

set @query = 'select PanelID, PanelCode, PanelName, EvaluatorID, PersonID, ApplicationID, ' + @cols + ' from (
select 
distinct p.PanelID, p.PanelCode, p.PanelName, e.EvaluatorID, e.PersonID, ppl.LastName, pApps.ApplicationID, ev.AnswerNumeric

from 
tblpanels p inner join tblEvaluators e on p.PanelID = e.PanelID
inner join tblPeople ppl on ppl.PersonID = e.PersonID
inner join tblPanelApps pApps on pApps.PanelID = p.PanelID
inner join tblEvaluations ev on ev.ApplicationID = pApps.ApplicationID and ev.EvaluatorID = e.EvaluatorID

where 
p.PanelID in (1234, 3656)
)tmp
PIVOT
(
max(AnswerNumeric)
For LastName IN (' + @cols + ')
) As P 
Order By PanelID, ApplicationID'
execute(@query)

輸出為

+=========+===========+===========+=============+==========+===============+======+=======+
| PanelID | PanelCode | PanelName | EvaluatorID | PersonID | ApplicationID | John | Carol |
+=========+===========+===========+=============+==========+===============+======+=======+
|    1234 |  12123412 | Panel A   |        3674 |     4834 |        112233 | 6    | NULL  |
+---------+-----------+-----------+-------------+----------+---------------+------+-------+
|    1234 |  12123412 | Panel A   |        3674 |     4834 |        112233 | NULL | 4     |
+---------+-----------+-----------+-------------+----------+---------------+------+-------+

每個ApplicationID僅應為一行。 如何解決以下輸出的查詢?

+=========+===========+===========+=============+==========+===============+======+=======+
| PanelID | PanelCode | PanelName | EvaluatorID | PersonID | ApplicationID | John | Carol | Total
+=========+===========+===========+=============+==========+===============+======+=======+
|    1234 |  12123412 | Panel A   |        3674 |     4834 |        112233 | 6    | 4     | 10
+---------+-----------+-----------+-------------+----------+---------------+------+-------+

編輯:我還需要在每一行的末尾總得分。

我修好了它。 evaluatorID和PersonID引起了問題。 我將其從子查詢中刪除,現在已修復。 我還添加了總計列。 更新后的查詢是

set @query = 'select PanelID, PanelCode, PanelName, ApplicationID, 
' + @cols + ', (ISNULL(' + REPLACE(@cols, ',', ',0.) + ISNULL(') + ',0.)) AS TOTAL from (
select 
distinct p.PanelID, p.PanelCode, p.PanelName, pApps.ApplicationID, ppl.LastName, isnull(ev.AnswerNumeric, 0) as AnswerNumeric

from 
tblpanels p inner join tblEvaluators e on p.PanelID = e.PanelID
inner join tblPeople ppl on ppl.PersonID = e.PersonID
inner join tblPanelApps pApps on pApps.PanelID = p.PanelID
left join tblEvaluations ev on ev.ApplicationID = pApps.ApplicationID and ev.EvaluatorID = e.EvaluatorID

where 
p.PanelID in (1234, 3656)
)tmp
PIVOT
(
max(AnswerNumeric)
For LastName IN (' + @cols + ')
) As P
Order By PanelID, ApplicationID'
--print @query
execute(@query)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM