SELECT sid, 'Math' as subject, math as mark
FROM your_table
UNION ALL
SELECT sid, 'English' as subject, english as mark
FROM your_table
UNION ALL
SELECT sid, 'French' as subject, french as mark
FROM your_table
しかし、問題の根本的な原因は、データベースの設計が間違っていることです。これらのサブジェクトは、そもそも列であってはならず、目的の出力と非常によく似たテーブルに格納する必要があります。
編集
それで、それは何をしますか?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
sid
を返します 列、ハードコードされた値'Math'
を持つ「仮想」列 subject
という名前が付けられています 。値'Math'
を保存していないため どこかで、これをハードコーディングする必要がありました。そして最後に、列math
も選択します。 mark
という名前を使用する 代わりは。 math
の違いに注意してください および'Math'
-1つは列で、もう1つは一重引用符のために文字列リテラルです。
これは、3つの科目すべてに対して行われます(4つの科目がある場合、UNIONには4つの部分が必要です)
UNION ALLは、3つのSELECTすべてを1つのクエリに結合します。 andrソリューション(それを理解していない誰かによって反対された)は、それを派生テーブル(またはインラインビュー)に明示的に配置することによって、これをさらに明確にします。
各SELECTを単独で実行して、個々の部分が何をしているかを確認します。
パーツas mark
は「列エイリアス」と呼ばれ、結合内の異なるテーブルから同じ名前の列を取得し、結果セットに一意の名前を付けるために使用することもできます。