Oracle-10g
在具有不同列的單行中添加多行
我想加入兩個表(它們被稱為寄存器和讀取)。結果,我想獲得 4 列,對應於寄存器 ID。
根據下一個範例,通過連接表,我獲得 2 行。在某些情況下,我可能會找到/獲得 4 行,因為它們存在於 Reads 表中。
表:寄存器
ID Number Prod_ID 331 01 112233 332 02 112233 333 03 112233 334 04 112233
表:讀取
Read_Id Register_Id 011 331 012 332
我使用此查詢連結連接兩個表:
SELECT rg.ID FROM Reads rd LEFT JOIN Registers rg on rd.Register_ID = rg.ID WHERE rg.Prod_ID = 112233;
我的結果是下一個:
ID 331 332
我真正想要的是只獲得一行,將第一個結果分配給第一列,將第二個結果分配給第二列,依此類推。此外,我想添加一個額外的列,顯示有多少列包含資訊。
預期結果:
RegisterID1 RegisterID2 RegisterID3 RegisterID4 Count 331 332 2
有什麼簡單的方法可以做到這一點?非常感謝你!
您使用的是 10g,因此
PIVOT
不可用,但仍然具有良好的舊sum(case ...)
.drop table reads purge; drop table registers purge; create table registers (id number, n varchar2(2), prod_id number); insert into registers values (331, '01', 112233); insert into registers values (332, '02', 112233); insert into registers values (333, '03', 112233); insert into registers values (334, '04', 112233); commit; create table reads (read_id varchar2(3), register_id number); insert into reads values ('011', 331); insert into reads values ('012', 332); commit; SELECT sum(case when rg.n = '01' then rd.register_id end) as "RegisterID1", sum(case when rg.n = '02' then rd.register_id end) as "RegisterID2", sum(case when rg.n = '03' then rd.register_id end) as "RegisterID3", sum(case when rg.n = '04' then rd.register_id end) as "RegisterID4", count(rd.register_id) as "Count" FROM Reads rd RIGHT JOIN Registers rg on rd.Register_ID = rg.ID WHERE rg.Prod_ID = 112233; RegisterID1 RegisterID2 RegisterID3 RegisterID4 Count ----------- ----------- ----------- ----------- ---------- 331 332 2