2016-09-12 28 views
-1

比方說,我有這樣的重組數據

Store | Fruit | Quantity 
--------+-----------+----------- 
Lincoln | cherry | 2 
Lincoln | apple | 3 
Lincoln | pear  | 4 
Abe  | cherry | 1 
Abe  | apple | 2 

我需要一個SQL查詢將返回此表:

Store | Cherry | Apple | Pear 
--------+--------+-------+------ 
Lincoln | 2  | 2  | 4 
Abe  | 1  | 2  | 

這很好,如果「櫻桃,蘋果,梨「列在查詢中是」硬編碼的「,但是什麼是理想的(不知道這是否可能)是,如果在數據中彈出新的水果,將由SQL查詢創建新的列

+0

你試過了什麼?如果您遇到困難,很樂意幫忙,但這不是代碼編寫服務 –

+0

@MikePala,您到現在爲止嘗試過什麼? –

+0

@Mikepala,你需要一個'pivot' –

回答

1

至於你的問題只標有,這是標準SQL:

select store, 
     sum(case when fruit = 'Cherry' then quantity end) as cherry_count, 
     sum(case when fruit = 'Apple' then quantity end) as apple_count, 
     sum(case when fruit = 'Pear' then quantity end) as pear_count 
from the_Table 
group by store; 
1

如果您正在使用MS SQL SERVER使用pivot。你可以使用下面的查詢,並與你的表名替換表名:

MS SQL SERVER

SELECT * 
FROM 
(
    SELECT [Store], [Fruit], [Quantity] 
    FROM [Your-TableName] 
) src 
pivot 
(
    SUM([Quantity]) 
    FOR [Fruit] IN (Cherry, Apple, Pear) 
) piv; 
+0

這可能只適用於MS SQL,但您可以在其他環境中使用類似如下的遊標來僞造它:http://dba.stackexchange.com/questions/44672/how-to-create-a-table-in- mysql-with-automatic-numeration-of-columns –

+0

@PaulColdrey謝謝,我忘了提及SQL服務器,現在添加了.OP沒有提及導致混淆的DBMS –