2016-04-18 2 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

ドッグとして '郵便番号を選択すると if(animal =' dog 'count、0)if(animal =' lizard '、count、0)if郵便番号による郵便番号によってtest1グループから; – sumo

+0

ありがとう、私の答えを編集しました。 – Michael

1

CASE行くための正しい方法ですが、集約、および多くのCase別々のステートメントを必要としています。書かれているように、単一のcase文があります。これは、結果セットの1つのフィールドを意味します。代わりに

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

これは間違いなく意味がありますが、 "from test1"でsql構文エラーが発生しました – sumo

+0

'etc ... 'を削除して正しい表をポイントしましたか? – JNevill

+0

最後のフィールドがカンマで終わっていないことを確認してください。それは確かにDBを怒らせるでしょう。 – JNevill