SQL将列值显示为设置值,或者根据状态显示null

时间:2015-12-05 17:38:41

标签: sql database oracle

下面是我写的代码 - 我想要的是当状态等于' 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'。

希望你能帮忙!

4 个答案:

答案 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为“空白”。 coalesce()将其转换为空字符串。

现在的事实是,这是一种非常迂回的方式来获得你想要的东西,虽然聪明,因为你使用了你已经知道的语法拼凑了非常接近的东西。