在我的表中,我需要搜索特定行中的特定列,以查找哪个列包含我定义的值。
例如在我的表格中
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)。
答案 0 :(得分: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
答案 1 :(得分:0)
您想要列的名称吗?
您可以使用嵌套的if
例如
select if(Col4 = 'B', 'Col4', if(Col5 = 'B', 'Col5', if(Col6 = 'B', 'Col6', NULL)))
from table where ID = 2