我有一个表,列如下:
| id | position | A | B | C | D | E |
我选择的是id。如果位置是'1',它应该返回列A, B, C。如果不是,它应该返回列D, E
例如,如果表是:
| id | position | A | B | C | D | E |
| 0 | 1 | a | b | c | d | e |
| 1 | 2 | a | b | c | d | e |
当查询选择id=0时,结果应该是:
| 0 | 1 | a | b | c |
当查询选择id=2时,结果应该是:
| 1 | 2 | d | e |
我应该如何写SQL查询?
您不能根据选定的行编写查询来选择列。但是如果你想要特定的列,你可以这样做:
SELECT id, position, A, B, C
FROM tablename
WHERE id = 1
试试这个…
select id, position,
if (id=0, A, D),
if (id=0, B, E),
if (id=0, C, "")
from Table1
这有点不灵活,但这是一个开始。你可以在这里玩:http://sqlfiddle.com/# !9/d47c33/10/0
结果集每行不能有不同的列数,所以它必须是| 1 | 2 | d | e | NULL |
要得到你想要的,你可以创建两个查询并将它们联合在一起。否则,您可以为每列创建一个CASE语句,但如果没有必要,请不要这样做。
如果您有选择的话,我建议您只进行两次查询,并分别处理结果。
但是UNION:
select id, position, a, b, c
from cool_table
where id in (1, 2, 3, 4, 5)
and position = 1
UNION
select id, position, d, e, null
from cool_table
where id in (1, 2, 3, 4, 5)
and position <> 1
说真的,这看起来像是你在"违背常理"。也许可以在其他地方做一些改进,使这一点没有必要。
数据库查询不是放置显示逻辑的地方。正如其他人所说,查询有固定数量的字段。
您可以根据position
字段使用if
或case
来空字段,但选择所有字段,将它们发送到前端,并让它显示如何显示结果会更简单。