Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果存在多个数据,请在select语句中合并一列_Sql_Oracle_Group By - Fatal编程技术网

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?