如果我想從表 1 中帶回所有“名稱”,并且只列出第 2 列中的輸出以包含值(如果它是“Apple”),我正在嘗試計算 SQL 的方式。如果它不是“Apple”或“Null”,那么第 2 列也應該是“Null”
表格1
| 標識(包) | 姓名 |
|---|---|
| 24 | 鮑里斯 |
| 25 | 多米尼克 |
| 26 | 理士 |
| 27 | 伊麗莎白 |
| 28 | 本 |
表 2
| 身份證(fk) | 描述 |
|---|---|
| 27 | 蘋果 |
| 27 | 橘子 |
| 27 | 梨 |
| 26 | 蘋果 |
| 26 | 梨 |
| 25 | 梨 |
| 24 | 橘子 |
所需輸出
| 姓名 | 描述 |
|---|---|
| 鮑里斯 | |
| 多米尼克 | |
| 理士 | 蘋果 |
| 伊麗莎白 | 蘋果 |
| 薩吉德 |
uj5u.com熱心網友回復:
您可以通過多種方式解決它,例如:
SELECT t1.name
, MAX(CASE t2.descripton WHEN 'Apple' THEN t2.descripton END)
FROM t1
JOIN t2
USING(id)
GROUP BY t1.name;
CASE 運算式會將 Apple 之外的所有內容都映射為 null。然后,MAX 會將每個名稱的集合減少為 Apple 或 null。
uj5u.com熱心網友回復:
我認為以下查詢對您有用:
Select Name, CASE WHEN ID IN (SELECT DISTINCT ID FROM table2 WHERE LOWER(description) = 'apple') THEN 'Apple' ELSE Null END as Description FROM table1;
uj5u.com熱心網友回復:
如果第二個表中沒有重復項(在您確認是這種情況的問題下方的評論中),則這是外連接的簡單應用。
這里我在with子句中包含了測驗資料。你不需要它 - 你有實際的表。洗掉with子句,檢查主查詢并根據需要更改表和列名稱。
with
table_1 (id, name) as (
select 24, 'Boris' from dual union all
select 25, 'Dominic' from dual union all
select 26, 'Rishi' from dual union all
select 27, 'Elizabeth' from dual union all
select 28, 'Ben' from dual
)
, table_2 (id, description) as (
select 27, 'Apple' from dual union all
select 27, 'Orange' from dual union all
select 27, 'Pear' from dual union all
select 26, 'Apple' from dual union all
select 26, 'Pear' from dual union all
select 25, 'Pear' from dual union all
select 24, 'Orange' from dual
)
select t1.name, t2.description
from table_1 t1 left outer join table_2 t2
on t2.id = t1.id and t2.description = 'Apple'
order by t1.id
;
NAME DESCRIPTION
--------- -----------
Boris
Dominic
Rishi Apple
Elizabeth Apple
Ben
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366514.html
上一篇:如果有重復,請保留所有條目
下一篇:從另一個日期減去一個日期
