我有一個具有以下結構的表(客戶 ID 和產品):

我試圖以相同的方式旋轉,以便每個 Id 只有一行。為此,我使用 case 陳述句:
select distinct
id,
case when purchased_item = 'Item 1' then 'Y' else 'N' end item_1,
case when purchased_item = 'Item 2' then 'Y' else 'N' end item_2,
case when purchased_item = 'Item 3' then 'Y' else 'N' end item_3
from my_table
然而,這是我得到的結果:

有什么方法可以獲得相同的結果,但每個 ID 只有一行?
uj5u.com熱心網友回復:
要回答您的問題,您需要分組并使用最大功能:
select
id,
max(case when purchased_item = 'Item 1' then 1 else 0 end) item_1,
max(case when purchased_item = 'Item 2' then 1 else 0 end) item_2,
max(case when purchased_item = 'Item 3' then 1 else 0 end) item_3
from my_table
group by id
uj5u.com熱心網友回復:
從 Oracle 11.1 開始,您可以使用pivot運算子,如下所示。請注意我在with子句中添加的其他示例(僅用于測驗 - 洗掉它,并在查詢中使用您的實際表和列名稱)。我為一個只購買了 的客戶添加了一個 id Item 5,您似乎并不關心輸出中的 id ,還有另一個客戶多次購買同一件商品的 id (假設您嘗試中的“distinct”是有原因的) )。
with
my_table(id, purchased_item) as (
select 123, 'Item 1' from dual union all
select 123, 'Item 2' from dual union all
select 123, 'Item 3' from dual union all
select 456, 'Item 1' from dual union all
select 456, 'Item 2' from dual union all
select 789, 'Item 1' from dual union all
select 111, 'Item 5' from dual union all
select 333, 'Item 1' from dual union all
select 333, 'Item 1' from dual
)
select id, nvl(i1, 'N') item_1, nvl(i2, 'N') item_2, nvl(i3, 'N') item_3
from my_table
pivot (max('Y') for purchased_item in ('Item 1' i1, 'Item 2' i2, 'Item 3' i3))
order by id -- IF NEEDED
;
ID ITEM_1 ITEM_2 ITEM_3
--- ------ ------ ------
111 N N N
123 Y Y Y
333 Y N N
456 Y Y N
789 Y N N
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/373081.html
上一篇:按值的數量計數
