1

私のテーブルでは、特定の行の特定の列を検索して、定義した値を含む列を見つける必要があります。

たとえば、私のテーブルでは

ID | Col1 | Col2 | Col3 | Col4 | Col5 | Col6
--------------------------------------------
1  | A    | B    | C    | C    | B    | A
2  | C    | B    | A    | A    | C    | B
3  | B    | A    | C    | B    | A    | C

行 2の列 4、5、および 6を検索し、値 B が発生する列 (Col6) を特定するクエリが必要です。

4

2 に答える 2

3

一連のCASE条件を使用して'B'各列と照合すると、うまくいきます。それぞれ、列の文字列リテラル名をTHEN値として指定する必要があります。列名を動的に決定することはできません。ハードコーディングする必要があります。

SELECT
  CASE
    WHEN Col2 = 'B' THEN 'Col2' 
    WHEN Col4 = 'B' THEN 'Col4'
    WHEN Col6 = 'B' THEN 'Col6'
    ELSE 'Not found' 
  END AS which_column
FROM 
  yourtable
WHERE id = 2

複数を返すには、列名または空の文字列を返すCASEでステートメントをラップできます。ただし、これは、同じケースに対して複数の条件を使用するのではなく、CONCAT()いくつかの個別のステートメントを使用することを意味します。CASE

SELECT
  CONCAT(
    CASE WHEN col2 = 'B' THEN 'Col2 ' ELSE '' END,
    CASE WHEN col4 = 'B' THEN 'Col4 ' ELSE '' END,
    CASE WHEN col6 = 'B' THEN 'Col6' ELSE '' END
  ) AS which_columns
FROM yourtable
WHERE id = 2
于 2012-11-13T14:06:46.327 に答える
0

列の名前が必要ですか?

ネストされたif例を使用できます

select if(Col4 = 'B', 'Col4', if(Col5 = 'B', 'Col5', if(Col6 = 'B', 'Col6', NULL)))
from table where ID = 2
于 2012-11-13T14:05:36.200 に答える