2016-05-14 8 views
-2

ich wie folgt haben Datenbank auswählen verwenden:Wie Distinct

npw | sales_name | sales_type | Region | 
----------------------------------------- 
    1 | Rob  | private 1 | 1 | 
    2 | Cait | private 2 | 2 | 
    3 | Blue | public  | 4 | 
    4 | ReD  | public  | 3 | 
    5 | Max  | private 1 | 2 | 

, und ich will es wie aussehen:

region| private 1 | private 2 | public  | 
----------------------------------------------- 
    1 |  -  |  -  |  -  | 
    2 |  -  |  -  |  -  | 
    3 |  -  |  -  |  -  | 
    4 |  -  |  -  |  -  | 

so ich möchte verschiedene Spalte Region als Zeilen und deutliche sales_type Spalte als Spaltenüberschrift. In Zukunft kann ein neuer sales_type hinzugefügt werden. Welche SQL-Abfrage für es & neue sales_type automatisch hinzugefügt, um die neue Spaltenüberschrift?

+0

eine Datenbank wählen Sie bitte – e4c5

+0

Welche Sie RDBMS benutzen ? MySQL, SQL-Server, Oracle? Markieren Sie die Frage entsprechend. –

+0

Wie viele sales_type kann nur 3 nach den Daten haben? –

Antwort

1

Sie können CASE solches Ergebnis erreichen, wenn UND GROUP BY

SELECT 
    Region, 
    CASE 
     WHEN sales_type = 'private 1' 
     THEN sales_type 
     ELSE '-' END AS 'private 1', 
    CASE 
     WHEN sales_type = 'private 2' 
     THEN sales_type 
     ELSE '-' END AS 'private 2', 
    CASE 
     WHEN sales_type = 'public' 
     THEN sales_type 
     ELSE '-' END AS 'public' 
FROM your_table 
GROUP BY Region; 
+0

Also muss ich Abfrage jedes Mal bearbeiten, wenn neue sales_type hinzugefügt? wie privat 3. –

+0

Sie haben nicht erwähnt, dass Sie andere sales_type haben. @NamikazeSheena – 1000111

+0

Theres eine Möglichkeit. –

1

try

folgende
select Region, 
    case when sales_type in('private 1') then sales_name else '' end private1, 
    case when sales_type in('private 2') then sales_name else '' end privat2, 
    case when sales_type in('public') then sales_name else '' end public 
from Table1 

Scheck in sqlfiddle