我有一个要求,我有一个如下所示的选择语句:
SELECT t1.a,t2.b,t2.c FROM t1,t2 WHERE t1.d = t2.e group by a,b;
我正在提取专栏'b'
并将其与专栏'a'
分组。但是,对于t2
列的一个计数,表t1.a
中的行数可以是多个,并且t2.b
在每种情况下都可以不同。
因此,对于t1.a
的一次计数,如果有多个t2.b
,我希望它显示为“MULTIPLE”,否则,它应显示t2.b
的值
我希望我的问题很明确。 提前谢谢,
Anoop
我的查询:
select prh.requisition_header_id,
case when count(prl.suggested_vendor_name)>1 THEN 'MULTIPLE' ELSE prl.suggested_vendor_name END suggested_vendor_name
from PO_REQ_DISTRIBUTIONS_ALL prd,PO.PO_REQUISITION_LINES_ALL prl, gl_code_combinations gcc,fnd_flex_values_vl f1,
fnd_flex_values_vl f2,PO_REQUISITION_HEADERS_ALL prh,PER_ALL_PEOPLE_F papf
where prd.requisition_line_id = prl.requisition_line_id
and prl.requisition_header_id = prh.requisition_header_id
AND PAPF.PERSON_ID = PRL.TO_PERSON_ID
AND TRUNC(SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE AND PAPF.EFFECTIVE_END_DATE
and gcc.code_combination_id = prd.CODE_COMBINATION_ID
and gcc.segment1 = f1.flex_value
and gcc.segment2 = f2.flex_value
and f1.flex_value_set_id = 1
and f2.flex_value_set_id = 2
and prh.AUTHORIZATION_STATUS IN('APPROVED','IN PROCESS')
and prh.preparer_id = 35016
group by prh.requisition_header_id,gcc.segment1,gcc.segment2,f2.description,prh.requisition_header_id,
papf.full_name ,prl.suggested_vendor_name;
答案 0 :(得分:1)
我能找到的最接近的方法是下面说明的方法。请注意,我已删除您发布的所有样板文件以提高可读性。
select case
when vendors.vendorsqty > 1 then 'MULTIPLE'
else (select suggested_vendor_name
from po_requisition_lines_all
where requisition_header_id = vendors.headerid)
end
from (select prh.requisition_header_id headerid,
count(prl.suggested_vendor_name) vendorsqty
from PO_REQUISITION_HEADERS_ALL prh,
PO_REQUISITION_LINES_ALL prl
where prl.requisition_header_id = prh.requisition_header_id
group by prh.requisition_header_id) vendors;
答案 1 :(得分:0)
我不确定你想要完成什么。您是否尝试将t1.a列中的所有值分组为一个字符串?然后你使用CONCAT(GROUP_CONCAT(t1.a),GROUP_CONCAT(t2.b))或者你只想连接两个值?如果是这样,你使用CONCAT(t1.a,t2.b)
答案 2 :(得分:0)
尝试类似:
SELECT t1.a,CASE WHEN COUNT(t2.b) > 1 THEN "MULTIPLE" ELSE t2.b END FROM t1 INNER JOIN t2
ON t1.d = t2.e
GROUP BY t1.a;
答案 3 :(得分:0)
感谢回复人员,
最终的答案包括以下逻辑:
decode(count(distinct prl.suggested_vendor_name) over (partition by prh.requisition_header_id),1,prl.suggested_vendor_name,0,null,'MULTIPLE')
vendor
我使用partition by
对供应商进行分组,并使用decode
来显示所需的结果