簡體   English   中英

Oracle SQL中單行中的常見多行

[英]Common multiple rows in single row in oracle sql

我在下面查詢,而不是為同一BN創建多個條目(行),而應在具有FC,FM,MS值的同一行中創建條目。

select bspt.BN, FC, FM, MS from(select distinct(ozt.BRD_ID),
bp.NAME as BN, 
os.OSS FC, '' FM, '' MS
from PR_BP ozt, PR_BP_BPP bp, BDD b, OS_VIEW os 
where bp.BRD_ID = ozt.BRD_ID AND ozt.BRD_ID = os.OBJECT_ID and 
os.OST = 'PR_BP_BPP' AND (ozt.BID = 10001)
and ozt.BID = b.BID AND ozt.BP_ACTIVE = 'Y'
UNION ALL
select distinct(ozt.BRD_ID),
bp.NAME as BN, 
'' FC, os.OST FM, '' MS
from PR_BP ozt, PR_BP_BPP bp, BRAND b, OS_VIEW os 
where bp.BRD_ID = ozt.BRD_ID AND ozt.BRD_ID = os.OBJECT_ID and 
os.OST = 'PR_BP_BPP' AND (ozt.BID = 10002)
and ozt.BID = b.BID AND ozt.BP_ACTIVE = 'Y'

上面的查詢正在為BNAME列生成帶有多個條目的輸出。 因此,與其創建單獨的條目,不如為通用BNAME只創建一行。

所有這些都可以通過一個條件聚集查詢來完成。

select bp.NAME as BIZNAME, 
max(case when bbp.BRAND_ID = 10001 then os.OBJECT_STATUS end) FC,
max(case when bbp.BRAND_ID = 10002 then os.OBJECT_STATUS end) FM, 
max(case when bbp.BRAND_ID = 10007 then os.OBJECT_STATUS end) MS 
from PR_BP bbp
JOIN PR_BP_BPP bp ON bp.BP_ID = bbp.BP_ID
JOIN BRAND b ON bbp.BRAND_ID = b.BRAND_ID
JOIN OS_VIEW os ON bbp.BP_ID = os.OBJECT_ID
where os.OBJECT_TYPE = 'PR_BP_BPP' AND bbp.BP_ACTIVE = 'Y'
group by bp.NAME

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM