2015-05-27 33 views
-2

Oracle數據庫10g 10.2.0.4.0,用的Oracle SQL Developer工作查詢有條件行分配給列

TableA - Key1 - Key2 - ConditionColumn

TA - K1 - K2 - C1

查詢-1 SELECT K1, K2 FROM TA WHERE C1 = 1234 ORDER BY K1;

--K1 K2 --T40105 136853 --T40108 136861 --T40109 136869 --T40111 136878 --T40113 136886

TableB - Key2 - Data1 - Data2

TB - K2 - D1 - D2

查詢-2 SELECT K2, D1, D2 FROM TB WHERE K2 = (SELECT K2 FROM TA WHERE K1='T40105');

--K2 D1 D2 --136853 1 1554 --136853 2 1552 --136853 3 1552

D1總是= {1,2,3}爲特定密鑰2。 如何結合這兩個查詢得到如下所示的所有K1值的輸出?

--K1 K2 D2(@D1=1) D2(@D1=2) D2(@D1=3) --T40105 136853 1554 1552 1552 --T40108 136861 --T40109 136869 --T40111 136878 --T40113 136886

回答

0

我有下面的代碼試圖

select * from 
(select a.k1,a.k2,b.d2,b.d1 from ta a 
left outer join 
tb b 
on a.k2=b.k2 
) 
pivot(sum(d2) as d for (d1) in (1,2,3)) 
order by k1 
+0

「透視」 是行不通的錯誤:「SQL命令不能正常結束了」。 Google使用10g,「Pivot」是11g – Shivam7898

0

工作方案(Oracle 10g中)

SELECT MAX(h.K1) AS "K1" 
,b.K1 AS "K2" 
,SUM(DECODE(D1,1,D2)) AS "D2(D1=1)" 
,SUM(DECODE(D1,2,D2)) AS "D2(D1=2)" 
,SUM(DECODE(D1,3,D2)) AS "D2(D1=3)" 
FROM TB b RIGHT OUTER JOIN TA h on h.K1 = b.K1 
WHERE C1 = 1234 
GROUP BY b.K2 
ORDER BY b.K2;