[英]How to select multiple columns based on a condition in SQL?
我有一個表,列是這樣的:
| id | position | A | B | C | D | E |
我是按 id 選擇的。 如果 position 為“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 查詢?
您不能擁有每行具有不同列數的結果集,因此它必須是 | 1 | 2 | d | 電子 | 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
不過,實際上,這似乎是在“違背常理”。 也許可以在其他地方進行一些改進,從而使這一點變得不必要。
您不能根據所選行向 select 列寫入查詢。 但如果你想要特定的列,你可以試試這個:
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
數據庫查詢不是放置顯示邏輯的地方。 正如其他人所說,查詢具有固定數量的字段。
您可以根據position
字段使用if
或case
到 null 字段,但將 select 所有字段發送到前端,讓它解決如何顯示結果會更簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.