SQL:根据一个字段的条件值

时间:2012-07-18 22:32:59

标签: mysql sql

我已定义:
表格X

ID    AGE    HEIGHT   REGISTERED
1     23     1.83     1
2     24     1.81     0
3     24     1.72     0
4     22     1.91     1
5     32     1.76     0

我想执行查询以返回有效值,但*ONLY*表示已注册的ID。那些不是,将获得0作为回报。像这样:

结果

ID    AGE    HEIGHT   REGISTERED
1     23     1.83     1
2     0      0        0
3     0      0        0
4     22     1.91     1
5     0      0        0

定义该查询的方式是什么?

3 个答案:

答案 0 :(得分:4)

您可以使用MySQL特定的IF表达式:

SELECT 
    ID,
    IF(REGISTERED, AGE, 0) AS AGE,
    IF(REGISTERED, HEIGHT, 0) AS HEIGHT,
    REGISTERED
FROM tablex

查看在线工作:sqlfiddle

您还可以使用标准SQL CASE表达式:

SELECT 
    ID,
    CASE WHEN REGISTERED = 1 THEN AGE ELSE 0 END AS AGE,
    CASE WHEN REGISTERED = 1 THEN HEIGHT ELSE 0 END AS HEIGHT,
    REGISTERED
FROM tablex

如果你有很多专栏,那么在这里回复你的评论可能会稍微容易一些:

SELECT id, AGE, HEIGHT, REGISTERED
FROM tablex
WHERE REGISTERED

UNION ALL

SELECT id, 0, 0, 0
FROM tablex
WHERE NOT REGISTERED

ORDER BY ID

查看在线工作:sqlfiddle

请注意,此查询中的列列表可以缩短为SELECT *,查询将still work。但是,由于网站上其他地方已经涵盖的各种原因,不建议在生产代码中使用SELECT *

答案 1 :(得分:1)

您可以在SQL中使用IF

SELECT
  ID,
  IF(REGISTERED = 1, AGE, 0) AS AGE,
  IF(REGISTERED = 1, HEIGHT, 0) AS HEIGHT,
  REGISTERED
FROM TableX

答案 2 :(得分:0)

您也可以这样做

SELECT ID,年龄,身高,已注册 FROM(   SELECT ID,年龄,身高,从TableX注册WHERE注册= 1   UNION ALL   SELECT ID,0 AS年龄,0 AS高度,从TableX注册WHERE注册= 0 )按ID排序