下面是我写的代码 - 我想要的是当状态等于' N'显示'导出到WMS'在列中'导出到WMS'。
如果它有任何其他价值而不是' N'在状态中,我希望列仍然显示,因为某些结果将处于状态' N'但对于那些我不希望该列的值为空白的人。
select
m.display_order_number, m.record_create_date, l.lookup_description,m.wh_id,
m.client_code,m.order_type,m.order_date,m.UIN, m.ship_to_name,m.carrier,
(select DISTINCT 'Export to WMS'
from
t_3pl_order_master
where
status = 'N') AS "Export to WMS"
from
t_3pl_order_master m
INNER JOIN
t_3pl_lookup l on m.status = l.lookup_value AND l.lookup_type = 'Order Status';
我得到的结果是: here
在哪里可以清楚地看到状态是什么时候' W'它仍然显示'导出到WMS'但理想情况下,我希望这是空白的,那些具有状态' N'显示'导出到WMS'。
希望你能帮忙!
答案 0 :(得分:2)
使用案例表达式:
data2
以这种方式:
CASE WHEN status = 'N' THEN 'Export to WMS' END
请参阅此链接了解详情:https://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htm
答案 1 :(得分:1)
需要ELSE才能将其留空。否则它将为null。
CASE WHEN status = 'N' THEN 'Export to WMS' ELSE ' ' END AS "Export to WMS"
答案 2 :(得分:0)
如果我正确阅读你的帖子,只需使用case语句来处理这个问题。
答案 3 :(得分:0)
我强烈建议您使用其他答案中已描述过的case
表达式。但要解释为什么你的尝试不起作用,我会给你一些解决方法。
select
m.display_order_number, m.record_create_date, l.lookup_description,m.wh_id,
m.client_code,m.order_type,m.order_date,m.UIN, m.ship_to_name,m.carrier,
(
select distinct 'Export to WMS'
from t_3pl_order_master m2
where m.status = 'N' /* <<--- Difference is here */
) AS "Export to WMS"
from
t_3pl_order_master m inner join
t_3pl_lookup l on m.status = l.lookup_value AND l.lookup_type = 'Order Status';
只要在整个表中status = 'N'
中至少有一行,您编写的子查询将始终返回单个值“导出到WMS”。您需要做的是通过引用m.status
而不仅仅是status
将子查询与外部查询相关联(连接)。
请注意,它将评估为null为“空白”。 1}}如果实际需要,请使用coalesce()
将其转换为空字符串。
现在的事实是,这是一种非常迂回的方式来获得你想要的东西,虽然聪明,因为你使用了你已经知道的语法拼凑了非常接近的东西。