2016-04-23 12 views
0

transponieren Ich habe eine Tabelle mit 2 Feldern Land und Stadt. Ich möchte dies umsetzen, damit ich das Feld Land als meine Kopfzeilen und jede der Städte als Felder unter ihnen habe.Land und Stadt in SQL Server

Wenn ich den Code verwende ich unter ich die Ergebnisse erhalten geliefert, aber mit nulls

SELECT 
    CASE WHEN Country = 'USA' then City end as USA, 
    CASE WHEN Country = 'India' then City end as India, 
    CASE WHEN Country = 'UK' then City end as UK 
FROM Country 

Result from code

Meine Frage ist, wie bekomme ich ein Ergebnis ohne NULL-Werte?

Antwort

1

Sie können diese als max aggregieren (CASE WHEN ... END) AS ....

oder Sie können Pivot verwenden:

SELECT 
    p.* 
FROM 
    Country 
    PIVOT (MAX(City) FOR Country IN (USA, India, UK)) P 

das Ergebnis zu erzielen, das Sie suchen, Sie ‚ll Notwendigkeit, eine länderspezifische Kennung für jede Stadt einzuführen (zB: US: {1: New York, 2: Los Angeles}) wie folgt:

select * 
from 
(
    select 
     *, 
     ROW_NUMBER() over (partition by country order by City, Country) id 
    from Country 
) c 
pivot 
(
    max(city) for country in(usa, uk, india) 
) p 
+0

Beide geben nur 1 Reihe von Daten zurück – dnasim

+0

Sie haben also mehrere Städte in jedem Land und möchten Ländernamensspalten mit Stadtzeilen generieren, richtig? – mrtig

+0

Ja, ich habe einen Link zu einem Bild meiner aktuellen Ergebnisse direkt unter dem Code bereitgestellt. Ich habe 3 Städte pro Land und möchte sie alle sehen. 3 Spalten und 3 Zeilen ist meine gewünschte Ausgabe – dnasim

0

Sie diese mithilfe der bedingte Aggregation tun können:

+0

Das gibt nur die erste Zeile für mich zurück – dnasim

Verwandte Themen