如何在单个查询中添加两列作为结果

时间:2019-11-12 09:23:31

标签: sql oracle

我有以下查询

select a.emp_id,a.AUTH_TYPE,b.NTE_TX as des1
  from table  a inner join NOTES b on b.TBL_ROW_ID=a.emp_id
 where a.emp_id=56 and REF_NTE_TYP_ID=27

输出1

enter image description here

select a.emp_id,a.AUTH_TYPE,b.NTE_TX as des2
  from table  a inner join NOTES b on b.TBL_ROW_ID=a.emp_id
 where a.emp_id=56 and REF_NTE_TYP_ID=28

输出2

enter image description here

预期输出:

enter image description here

请帮助任何人。

3 个答案:

答案 0 :(得分:1)

简单的Aggregation(MAX)将帮助您获得预期的输出。

尝试一下:

select a.emp_id,a.AUTH_TYPE
    ,MAX(CASE WHEN REF_NTE_TYP_ID=27 THEN b.NTE_TX END) as des1
    ,MAX(CASE WHEN REF_NTE_TYP_ID=28 THEN b.NTE_TX END) as des2
  from table  a inner join NOTES b on b.TBL_ROW_ID=a.emp_id
where a.emp_id=56 and REF_NTE_TYP_ID IN(27,28)
GROUP BY a.emp_id,a.AUTH_TYPE

答案 1 :(得分:0)

如果TBL_ROW_ID, REF_NTE_TYP_ID在表NOTES中是唯一的,您还可以使用子查询:

select a.emp_id,a.AUTH_TYPE
     , (SELECT b.NTE_TX 
          FROM NOTES b 
         WHERE b.TBL_ROW_ID=a.emp_id
           AND REF_NTE_TYP_ID=27) as des1
     , (SELECT b.NTE_TX 
          FROM NOTES b 
         WHERE b.TBL_ROW_ID=a.emp_id
           AND REF_NTE_TYP_ID=28) as des2
  from table a
 where a.emp_id=56

如果您有多个文本输入,则可能希望将这些输入连接起来以仅打印一个长文本(将SELECT b.NTE_TX的2个出现替换为以下内容):

SELECT RTRIM(XMLAGG(XMLELEMENT(b.NTE_TX, CHR(10)).EXTRACT('//text()') ORDER BY b.NTE_TX).GetClobVal(),CHR(10))

我将CHR(10)用作文本定界符,只需将其替换为所需的任何其他字符串即可。而且您可能还需要其他一些ORDER BY条件。

答案 2 :(得分:0)

With Q1 As (
    select 56 emp_id, 'diple' auth_type 
),
Q2 As (
    Select 'text2' Des2,27 ref_nte_type_id, 56 row_id 
    Union All
    Select 'text1' Des2,28 ref_nte_type_id, 56 row_id 
)

Select Q1.*,Q2.Des2,Q3.Des2 Des1 
    From Q1 
    Inner Join Q2 
    On Q1.Emp_Id=Q2.Row_Id
    And Q2.Ref_Nte_Type_Id=27
    Inner Join Q2 Q3
    On Q1.Emp_Id=Q3.Row_Id
    And Q3.Ref_Nte_Type_Id=28