简体   繁体   English

使用 UNION ALL 运算符获取忽略 null 的结果

[英]Get result ignoring null using UNION ALL operator

Here is my code:这是我的代码:

select TRANSACTIONID, INFORMATION as "C_cntct", NULL as "C_nam"
from RETAILTRANSACTIONINFOCODETRANS as t
where INFOCODEID = 1009 and TRANSDATE = '2022-07-20'

UNION

select TRANSACTIONID, NULL, INFORMATION
from RETAILTRANSACTIONINFOCODETRANS as t
where INFOCODEID = 1010 and TRANSDATE = '2022-07-20'
group by TRANSACTIONID, INFORMATION
order by TRANSACTIONID, INFORMATION desc

I am getting result is:我得到的结果是:

TRANSACTIONID交易ID C_cntct C_cntct C_nam C_nam
ST-EMP-ST-LHR-01-66079 ST-EMP-ST-LHR-01-66079 RASHID ALI拉希德·阿里 NULL NULL
ST-EMP-ST-LHR-01-66079 ST-EMP-ST-LHR-01-66079 NULL NULL 0321-9439143 0321-9439143
ST-EMP-ST-LHR-01-66080 ST-EMP-ST-LHR-01-66080 SADAFSEHAR萨达夫塞哈 NULL NULL
ST-EMP-ST-LHR-01-66080 ST-EMP-ST-LHR-01-66080 NULL NULL 0345-4036448 0345-4036448

But I want this result, with Null Ignore:但我想要这个结果,用 Null 忽略:

TRANSACTIONID交易ID C_cntct C_cntct C_nam C_nam
ST-EMP-ST-LHR-01-66079 ST-EMP-ST-LHR-01-66079 RASHID ALI拉希德·阿里 0321-9439143 0321-9439143
ST-EMP-ST-LHR-01-66080 ST-EMP-ST-LHR-01-66080 SADAFSEHAR萨达夫塞哈 0345-4036448 0345-4036448

Sounds like you need conditional aggregation (aka Pivot), although without sample input data it's hard to say for sure.听起来您需要条件聚合(又名 Pivot),尽管没有样本输入数据很难确定。

It's generally simpler to just use MIN(CASE WHEN for this, rather than using the explicit PIVOT syntax, which is rather limited.通常只使用MIN(CASE WHEN更简单,而不是使用显式的PIVOT语法,这是相当有限的。

SELECT
  trans.TRANSACTIONID,
  MIN(CASE WHEN trans.INFOCODEID = 1009 THEN trans.INFORMATION END) AS C_cntct,
  MIN(CASE WHEN trans.INFOCODEID = 1010 THEN trans.INFORMATION END) AS C_nam
FROM RETAILTRANSACTIONINFOCODETRANS AS trans
WHERE trans.INFOCODEID IN (1009, 1010)
  AND trans.TRANSDATE = '2022-07-20'
GROUP BY
  trans.TRANSACTIONID
ORDER BY
  trans.TRANSACTIONID;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM