1

1つの列でステートメントを検索したいのですが、ステートメントが見つかるたびに、新しい列をミックスに挿入するという問題があります。mysqlデータベースを使用しています。

たとえば、私はこのようなデータを持っているとしましょう

  Class     Sub
  -----------------
    1       math       
    1       tech 
    2       math
    2       english
    3       math

次のようにデータを出力したいのですが。

Class    math  tech english
---------------------------
    1      Y     Y     N
    2      Y     N     Y
    3      Y     N     N

ステートメントを使用CASEして列の値を検索しようとしていますが、問題は、検出した値の結果が1つだけ列に返され、各列のcaseステートメントで同じクラスが繰り返されることです。 。ケースステートメントを組み合わせても、1つの列が表示されるため、機能しません。

4

3 に答える 3

4

CASE式を集計で ラップし、 GROUP BY. この場合MAX、アルファベット順で機能しYますN

(SQL フィドルのデモ)

SELECT class,
       MAX(CASE
             WHEN ( community_id = 'Math' ) THEN 'Y'
             ELSE 'N'
           END)  AS Math,
       MAX (CASE
              WHEN ( community_id = 'tech' ) THEN 'Y'
              ELSE 'N'
            END) AS tech,
       MAX (CASE
              WHEN ( community_id = 'english' ) THEN 'Y'
              ELSE 'N'
            END) AS english
FROM   x_class_community
GROUP  BY class 
于 2012-12-20T17:01:44.610 に答える
0

SQL Serverを使用している場合は、次のPIVOT関数を使用できます。

select class,
  isnull(math, 'N') math, 
  isnull(tech, 'N') tech, 
  isnull(english, 'N') english
from
(
  SELECT class, community_id, 'Y' as flag
  FROM   x_class_community
) src
pivot
(
  max(flag)
  for community_id in (math, tech, english)
) piv

SQL FiddlewithDemoを参照してください

結果は次のとおりです。

| CLASS | MATH | TECH | ENGLISH |
---------------------------------
|     1 |    Y |    Y |       N |
|     2 |    Y |    N |       Y |
|     3 |    Y |    N |       N |
于 2012-12-20T17:27:50.360 に答える
0

機能を使用する必要がありPIVOTます。DBMS を指定していませんが、ここに SQL Server のリンクがあります: Using PIVOT and UNPIVOT

于 2012-12-20T17:02:53.210 に答える