2016-04-18 102 views
2

table得到適當的查詢

我有這個表, 我試圖讓一個查詢,以顯示郵政編碼一次則有列標題是特定的動物。我嘗試使用這種情況下查詢,但它並沒有給我我想要的東西(我做了一個簡短的版本,這樣我就不會打字了這一切,而我是測試)

select 
    zipcode, 
    case animal when 'dog' then count when 'lizard' then count else 'null' end as animal 
from test1 
order by zipcode; 
+0

爲了幫助他人,也許你應該將問題標題改爲更具描述性的內容,比如'將行轉換爲mysql中的列'或類似的東西。 – Michael

回答

0

也許嘗試這樣的:

select zipcode, 
IF (animal='dog', count, 0) as dog, 
IF (animal='lizard', count, 0) as lizard 
from test1 GROUP by zipcode ORDER by zipcode 
+0

如果(動物='蜥蜴',count,0)作爲蜥蜴(動物='蜥蜴',計數,0)作爲蜥蜴 'select zipcode, if來自test1組的 通過郵編順序通過郵編; – sumo

+0

謝謝,編輯我的答案。 – Michael

1

CASE是正確的道路要走,但你需要聚集,許多獨立Case語句。正如你所寫,你有一個單一的案例陳述,這意味着你的結果集中的單個字段。

相反:

select 
    zipcode, 
    Sum(CASE WHEN animal= 'dog' THEN count END) as "Dog", 
    SUM(CASE WHEN animal = 'Lizard' THEN count END) as "Lizard", 
    etc.. 
from test1 
GROUP BY zipcode 
order by zipcode; 

你必須爲每個動物Sum(Case...),所以他們都有在結果集中自己的領域。此外,GROUP BY是必要的,以便您爲每個郵政編碼獲得每個動物的sum()

+0

這絕對有道理,但我從「test1」得到了sql語法錯誤 – sumo

+0

您是否刪除了'etc ...'並且指向了正確的表? – JNevill

+0

並確保最後一個字段不以逗號結尾。這肯定會惹怒數據庫。 – JNevill