Sortieren einer PIVOT-Tabelle in SQL
Ich habe eine Prozedur, die Rückgabe von Daten aus einer PIVOT-Tabelle. Ich muss nur Sortieren Sie diese Daten so, dass der DREHPUNKT zeigt die Spalten in einer bestimmten Reihenfolge. Ich brauche Sie, sortiert nach "SortOrder" - Feld in den Regionen der Tabelle. Hier ist mein script. Ich weiß nicht wirklich brauchen, die sortorder-Feld zurückgegeben, muss ich nur die Spalten sortiert "Sortierfolge". Jede Hilfe ist willkommen
CREATE TABLE #Temp
(
Region VARCHAR(255),
SortOrder INT,
Visible BIT
)
INSERT INTO #Temp
SELECT R.Region, R.SortOrder, CASE WHEN (ISNULL(R_SR.RegionID,0) = 0 AND ISNULL(R_SR_Serv.RegionID,0) = 0) THEN 0 ELSE 1 END AS Visible
FROM ServiceRecord SR
INNER JOIN Sites S ON SR.SiteID = S.SiteID
INNER JOIN Regions R ON R.SiteID = S.SiteID
LEFT OUTER JOIN lkup_Region_ServiceRecord R_SR ON R_SR.RegionID = R.RegionID AND R_SR.ServiceRecordID = SR.ServiceRecordID
LEFT OUTER JOIN lkup_Region_ServiceRecord_Serv R_SR_Serv ON R_SR_Serv.RegionID = R.RegionID AND R_SR_Serv.ServiceRecordID = SR.ServiceRecordID
WHERE SR.ServiceRecordID = @ServiceRecordID
AND R.RegionID % 100 != 0
AND SR.IsDeleted = 0
AND SR.English = 1
AND SR.PostedMain = 1
ORDER BY SR.ServiceRecordID, R.SortOrder
DECLARE @RegionList varchar(2000),@SQL varchar(max)
SELECT @RegionList = STUFF((SELECT DISTINCT ',' + QuoteName(Region) FROM #Temp ORDER BY ',' + QuoteName(Region) FOR XML PATH('')),1,1,'')
SET @SQL='
SELECT
A.*
FROM
(
SELECT
Region,
CAST(Visible AS INT) AS Visible
FROM #Temp
) B
PIVOT(MAX(Visible) FOR Region IN (' + @RegionList + ')) A
ORDER BY SortOrder;';
EXEC (@SQL);
In der ersten select (bevor PIVOT), bekomme ich folgende Tabelle (das ist die Reihenfolge, ich möchte, dass Sie geschwenkt in.
London and Middlesex 0
Oxford and Norfolk 1
Elgin 0
Huron and Perth 1
Grey and Bruce 0
Nach dem pivot, das ist mein Ergebnis
Elgin Grey and Bruce Huron and Perth London and Middlesex Oxford and Norfolk
0 0 1 0 1
Ich versuche, die Spalten in derselben Reihenfolge sortiert wie die Tabelle zeigt, bevor Sie die pivot - (London und Middlesex erste, Oxford und Norfolk 2., etc)
- Wenn Sie die
SortOrder
Spalte in derselect from #temp
tun, erhalten Sie eine Fehlermeldung? Was bedeutet das Ergebnis zeigen? - wenn ich "Sortierfolge", um die #temp-Tabelle, es vermasselt die PIVOT und anstatt 1 Zeile zurück, ich bekomme mehrere Zeilen (1 für jeden SortOrder-Wert)
- Können Sie die create table-Anweisung, einige Beispiel-Daten für jede Tabelle und dann das gewünschte Ergebnis? Oder erstellen Sie eine sqlfiddle.com mit Ihrer bestehenden Struktur/Daten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, dass die letzten Spalten sortiert werden, dann sollten Sie in der Lage sein, die
ORDER BY SortOrder
in Ihrer Abfrage, wird die@regionList
so ändern Sie den code wie folgt:Deinem aktuellen code ist die Bestellung der Daten durch die Region, so ist es alphabetisch. Sie implementieren müssen, um die SortOrder in dieser Liste.