2016-05-14 6 views
-2

У меня есть базы данных следующим образом:Как использовать SELECT 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 | 

и я хочу, чтобы сделать его выглядеть следующим образом:

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

поэтому я хочу отдельную колонку области в виде строк и отдельная колонка sales_type как заголовок столбца. В будущем есть возможность добавления нового sales_type. Какой SQL-запрос для него & сделать новый sales_type автоматически добавлен в новый заголовок столбца?

+0

выбрать базу данных пожалуйста – e4c5

+0

Какие RDBMS вас используют? mysql, sql-server, oracle? Соответственно ответьте на вопрос. –

+0

Сколько sales_type может иметь только 3 по данным? –

ответ

1

Вы можете достичь такого результата, СЛУЧАЙ, КОГДА И 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

, поэтому мне нужно редактировать запрос каждый раз, когда добавляется новый sales_type? как частный 3. –

+0

Вы не упомянули, что у вас есть другой тип sales_type. @NamikazeSheena – 1000111

+0

theres возможность. –

1

попробовать следующие

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 

чек в sqlfiddle