如何根据值返回限制列?

时间:2009-09-04 12:20:22

标签: sql mysql

我有一张类似

的表格
index customer_number ABC CWD ROE BEE 
1                   1   0   0   0   1

我想只返回值为1的字段名称'BEE'

我发现通过SHOW FIELDS我可以获取字段的名称,但我怎么说显示字段名称= 1的字段名称?

4 个答案:

答案 0 :(得分:1)

我会在这里使用CASE语句。

SELECT 
  index, customer_number, 
  CASE
    WHEN abc=0 THEN 'abc'
    WHEN cwd=0 THEN 'cwd'
  END
FROM
  table_name

答案 1 :(得分:0)

你不能以一般的方式做到这一点。

你可以做的是写一个像这样的SQL语句:

select index, customer_number, decode (ABC, 1, "ABC", null) || decode (CWD, 1, "CWD", null) || decode (ROE, 1, "ROE", null) || decode (BEE, 1, "BEE", null) from aTable

它将显示值等于1的每个条目的列名。它是oracle sql,所以如果你使用不同的rdbms,语法会有所不同。

答案 2 :(得分:0)

击败死亡的答案是使用CASE语句,每列一个。类似的东西:

SELECT CASE WHEN index=1 THEN "index" ELSE "no_index" END as i,
       CASE WHEN customer=1 THEN "customer" ELSE "no_customer" END as c,
       CASE WHEN ...

答案 3 :(得分:0)

这不是SQL真正要做的事情,并且最好用应用程序逻辑完成。

那就是说,如果你真的想这样做,你可能需要涉及临时表和SPROC:

  1. 获取行并确定设置了哪些字段。
  2. 使用该信息创建仅包含设置字段的临时表。
  3. 将数据插入该临时表,然后从那里选择行。
  4. 将SQL替换为几行应用程序代码将是一个巨大的混乱。可能不值得。