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 der select 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?
Schreibe einen Kommentar