我有以下查询
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
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
预期输出:
请帮助任何人。
答案 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