2017-04-02 4 views
0

this is a sample of the database I am workingSQLクエリ:クエリをテストするときに、異なる行の値を取得して別の列として表示できますか?

I want something like this, displaying specific rows as a column

+1

ここでは、ほとんどの人が写真の代わりに書式設定されたテキストを必要としています。ちょうどヒント... – jarlh

+0

申し訳ありませんが、ラッシュでこれをやっていた、私はそれが画像を表示すると思った 初めてstackoverflowでここに投稿、私は後でそれを編集します。 –

+0

@jarlh stackoverflowで投稿する際に画像をどのように表示しますか? –

答えて

0

ここでの問題は、行に取り付けられた列として列Bの値を表示するときは、する必要があり、その値が(よりむしろ行Bから正確である理由を指定、例えば行C)。あなたはそれをある程度まですることができますが、これはMySQLではますます廃止されています(SQLの他の風味では不可能です)。同じ理由から、いくつかの列をGROUP BYする場合は、GROUP以外の値または非集約値をSELECTに指定しないでください。そうでなければ、エンジンが選択すべき値はあいまいです。

だから何あなたが尋ねると、列ごとにJOINを行うことと同じである:だから、ここでこれらの1(フアン)もレコードを持っている場合は、その後、タイプ42のすべてのレコードを取得

SELECT maintable.*, 
    b.location_nr AS col2, 
    c.location_nr AS col4, 
    d.location_nr AS col5 
FROM maintable 
    LEFT JOIN maintable AS b ON (... AND b.type = 2) 
    LEFT JOIN maintable AS c ON (... AND c.type = 4) 
    LEFT JOIN maintable AS d ON (... AND d.type = 5) 
WHERE maintable.type = 42; 

同じ表のタイプ2の場合は、col2列に表示されます。以下同様です。

このような行が存在しない場合、col2の値はNULLになります。 行が複数表示された場合、複数の行が表示されます。

もう一つの選択肢は:二次のレコードがピックアップするためにここで

SELECT ..., 
    (SELECT location_nr FROM maintable AS b WHERE ... AND b.type = 2) AS col2, 
    ... 

、あまりにも、あなたの結合条件を指定する必要があります。

- 、あなたはおそらく、データベースのレイアウトを変更するだけで主テーブルの主な情報を残して、「属性」テーブルを追加したほうが良いかもしれないと述べた

+0

@LSemi、ありがとう:)、この1つを試してみる、あなたの応答のおかげで –

関連する問題