我有一个表,列是这样的:
| 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查询?
发布于 2021-10-09 20:47:24
不能使结果集的每行列数不同,因此它必须为| 1|2|d|e| NULL |。
为了得到你想要的东西,你可以执行两个查询并将它们联合在一起。否则,您可以为每一列创建一个CASE语句,但如果没有必要,请不要这样做。
如果您在这个问题上有任何选择,我建议只进行两个查询,并分别处理结果。
但是工会:
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真的,这看起来像是在“背道而驰”。也许可以在其他地方进行一些改进,使这一点变得不必要。
发布于 2021-10-09 20:47:49
您不能编写查询来根据所选行选择列。但是,如果您想要特定的列,您可以尝试这样做:
SELECT id, position, A, B, C
FROM tablename
WHERE id = 1发布于 2021-10-09 21:02:42
试试这个。
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
https://stackoverflow.com/questions/69510393
复制相似问题