Implementierung einer Pivot -Abfrage
-
16-10-2019 - |
Frage
Wie kann ich die folgende Auswahlanweisung drehen:
SELECT sc.CID,
sc.CodeName as OverviewText,
scRAG.CodeName as RAGStatusText
FROM StatusCode sc
LEFT OUTER JOIN ProjectOverview po
ON sc.CID = po.ProjectOverviewCID
AND po.ProjectId = 180
LEFT OUTER JOIN StatusCode scRAG
ON po.RAGStatusCID = scRAG.CID
WHERE sc.SCID = 18
Eine solche Aussage ergibt das folgende Ergebnissatz:
CID OverviewText RAGStatusText
--- ------------ -------------
153 Cost Green
154 Requirements Yellow
155 Schedule NULL
156 Technical NULL
157 Testing NULL
Aber ich möchte, dass es eine einzige Zeile mit 10 Werten zurückgibt, wie gezeigt, wie bellow:
----------------------------------------------------------------------------------------------
| Cost | Green | Requirements | Yellow | Schedule | NULL | Technical | NULL | Testing | NULL |
----------------------------------------------------------------------------------------------
Kann ich mich drehen? CID
?
Lösung
Ich bin mir nicht sicher, ob genau das, was Sie wollen. Aber es gibt Ihrem erwarteten Ergebnis. Beachten Sie, dass Sie die Spalten nach Belieben umbenennen können.
SET NOCOUNT ON
declare @t table(
cid int,
OverviewText varchar(15),
RAGStatusText varchar(15)
)
insert into @t values (153, 'Cost', 'Green');
insert into @t values (154, 'Requirements', 'Yellow');
insert into @t values (155, 'Schedule', 'NULL');
insert into @t values (156, 'Technical', 'NULL');
insert into @t values (157, 'Testing', 'NULL');
Select
[153|1] as [xyz],
[153|2],
[154|1],
[154|2],
[155|1],
[155|2],
[156|1],
[156|2],
[157|1],
[157|2]
FROM (
select CAST(cid as varchar) + '|1' type, OverviewText text from @t
Union
select CAST(cid as varchar) + '|2' type, RAGStatusText text from @t
) as SourceTable
Pivot(
min(text)
for type in ([153|1],[153|2], [154|1],[154|2], [155|1],[155|2], [156|1],[156|2], [157|1],[157|2])
) as PivotTable;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange