I am trying to write a PIVOT query on dynamic columns. It works but it is returning multiple rows.
My query is
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)
The output is coming as
+=========+===========+===========+=============+==========+===============+======+=======+
| 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 |
+---------+-----------+-----------+-------------+----------+---------------+------+-------+
It should be one row only per ApplicationID. How can I fix this query for below output?
+=========+===========+===========+=============+==========+===============+======+=======+
| PanelID | PanelCode | PanelName | EvaluatorID | PersonID | ApplicationID | John | Carol | Total
+=========+===========+===========+=============+==========+===============+======+=======+
| 1234 | 12123412 | Panel A | 3674 | 4834 | 112233 | 6 | 4 | 10
+---------+-----------+-----------+-------------+----------+---------------+------+-------+
EDIT: I also need a total score at the end for each row.
I fixed it. The evaluatorID and the PersonID were causing the issue. I took them off from the subquery and it is now fixed. I also added the Total column. The updated query is
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)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.