我已定义:
表格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
定义该查询的方式是什么?
答案 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排序