2016-07-07 9 views
0

Ich möchte meine Datensätze horizontal anzeigen (Zeilen zu Spalten) und habe die folgende SQL-Anweisung erstellt, die den Job erledigt, aber ich denke, sie könnte verbessert werden.Mehrere verschachtelte SELECT-Anweisungen in eine PIVOT-Tabelle konvertieren

Ich habe PIVOT-Tabellen recherchiert und glaube, sie würden es viel sauberer/efficeint machen, ich kann den PIVOT einfach nicht richtig arbeiten lassen. Alle Vorschläge willkommen:

SELECT (SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 1) 
     AS [Sedan] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 2) 
     AS [Sport utility] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 3) 
     AS [Sport coupe] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 4) 
     AS [Station wagon] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 5) 
     AS [Convertible] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 6) 

     AS [Coupe] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 7) 

     AS [Roadster] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 8) 

     AS [Mini van] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 9) 
     AS [Pick-up] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 10) 
     AS [Hatchback] 
     ,(SELECT 
       COUNT(*) 
      FROM ImportItem 
      WHERE BodyTypeID = 11) 
     AS [Cargo van] 

Dank

+0

Post Versuch PIVOT verwenden und Fehler Sie haben, so dass wir es debuggen helfen können. –

+0

Ich habe es gelöscht, weil ich es nicht funktionierte. Ich bin so ziemlich ein Anfänger, wenn es um SQL geht – James

+0

Können Sie Ihre Beispieldaten und erwartete Ergebnisse dann posten? d. h. wie die Daten jetzt aussehen und wie sie aussehen sollen? – scsimon

Antwort

1
SELECT COUNT(CASE WHEN BodyTypeID = 1 THEN 1 END) AS [Sedan], 
     COUNT(CASE WHEN BodyTypeID = 2 THEN 1 END) AS [Sport utility], 
     COUNT(CASE WHEN BodyTypeID = 3 THEN 1 END) AS [Sport coupe], 
     etc.. 
FROM ImportItem 

oder

SELECT [1] AS [Sedan], 
     [2] AS [Sport utility], 
     [3] AS [Sport coupe], 
     ect.. 
FROM (SELECT BodyTypeID FROM ImportItem) t 
PIVOT (COUNT(BodyTypeID) FOR BodyTypeID IN ([1],[2],[3],etc..)) p 
+0

Ich habe deine zweite Lösung nicht gesehen, als ich meine gepostet habe, die deine gespiegelt hat. Ich habe meine gelöscht und dir einen Tick gegeben. Ich will deinen Donner nicht stehlen :). – TLaV

+0

@TLaV lol ich war nur witzig. Ich warte eigentlich darauf, dass diese Frage geschlossen wird, da sie so oft dupliziert wurde – JamieD77

+0

Ha! Kein Problem!! – TLaV

Verwandte Themen