Sql 如果存在多个数据,请在select语句中合并一列
我有一个要求,其中我有一个选择声明,如下所示:Sql 如果存在多个数据,请在select语句中合并一列,sql,oracle,group-by,Sql,Oracle,Group By,我有一个要求,其中我有一个选择声明,如下所示: 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,我希望它显示为“多个”,否则,它应该显示t2.b的值 我希望我的问题是清楚的。 提前感谢, 阿努普 我的问题是: select prh.re
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
,我希望它显示为“多个”,否则,它应该显示t2.b
的值
我希望我的问题是清楚的。
提前感谢,
阿努普
我的问题是:
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;
我不知道你想完成什么。是否尝试将t1.a列中的所有值分组为一个字符串?然后使用CONCAT(GROUP_CONCAT(t1.a)、GROUP_CONCAT(t2.b))或者只需要CONCAT两个值?如果是这样,您可以使用CONCAT(t1.a,t2.b)尝试以下方法:
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;
- 注意:不鼓励隐式联接
- 我能找到的最接近的方法是下面所述的方法。请注意,为了提高可读性,我已经删除了您发布的所有样板文件
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;
谢谢各位的回复 有效的最终答案包括以下逻辑:
decode(count(distinct prl.suggested_vendor_name) over (partition by prh.requisition_header_id),1,prl.suggested_vendor_name,0,null,'MULTIPLE')
vendor
我使用
partitionby
对供应商进行分组,并使用decode
显示所需结果否。我想将表2中的值与表1中的值进行分组。但是如果对于表1中的一个唯一条目,表2中有多个条目,我希望它在一行中出现,列的值为“multiple”,而不是像普通group by子句的实际行为那样出现在多行中。显示计数是可以的,但是如果我也要显示字段,它会给我一个“ORA-00979:不是表达式的组或者即使没有case语句也应该出现的结果集。我想我必须使用内部查询?我已将查询添加到问题中好的,现在告诉我需要显示哪个字段?如果计数只有一个,您已经得到t2.b,那么您现在期望吗?我需要显示prl.suggered\u vendor\u name。如果prh.requisition\u header\u id只有一个prl.suggered\u vendor\u名称,则应显示prl.suggered\u vendor\u名称。否则“MULTIPLE”应与prh.requisition\u header\u id一起显示。是否将concat t1.a与MULTIPLE一起使用,而不仅仅是MULTIPLE?