【问题标题】:Case statement with WHERE clause带有 WHERE 子句的 case 语句
【发布时间】:2017-04-08 14:53:33
【问题描述】:

我正在使用查询来获取 Gridview 的结果

SELECT DISTINCT 
    Order_Header.Id, Order_Header.Payment_Id, Order_Header.Order_No
FROM 
    Order_Header 
INNER JOIN
    Order_Shipping_Detail ON Order_Header.Id = Order_Shipping_Detail.Order_Id  
LEFT OUTER JOIN
    cod_orders ON cod_orders.Order_Id = Order_Header.Id
WHERE 
    Status = 2 

但是,我需要退回所有 status = 2 的订单以及付款 ID 为 cod(也是 status = 2)且 cod_orders.Is_confirmed = 1 的订单。

我可以为此使用 CASE 语句吗?

但是,如果我尝试这样做,我将取得我的成果。

SELECT DISTINCT Order_Header.Id, order_Header.Payment_Method_Id,Order_Header.Order_No
FROM Order_Header INNER JOIN Order_Shipping_Detail
ON Order_Header.Id = Order_Shipping_Detail.Order_Id 
LEFT JOIN cod_orders 
ON cod_orders.Order_Id = Order_Header.Id 
WHERE Status = 2 and Payment_Method_Id != 6
UNION 
Select DISTINCT Order_Header.Id, order_Header.Payment_Method_Id,Order_Header.Order_No
FROM Order_Header INNER JOIN Order_Shipping_Detail
ON Order_Header.Id = Order_Shipping_Detail.Order_Id 
LEFT JOIN cod_orders 
ON cod_orders.Order_Id = Order_Header.Id 
WHERE Status = 2 AND cod_orders.Is_Confirmed = 1

我可以将这些合并到一个查询中吗?

【问题讨论】:

  • 最好提供有问题的样本数据和预期输出
  • 您是否尝试过WHERE 中的CASE 语句?

标签: sql sql-server gridview case


【解决方案1】:

我认为你可以像这样合并 2 个条件

SELECT DISTINCT Order_Header.Id, Order_Header.Payment_Id,Order_Header.Order_No
FROM Order_Header INNER JOIN
     Order_Shipping_Detail
     ON Order_Header.Id = Order_Shipping_Detail.Order_Id LEFT OUTER JOIN
     cod_orders
     ON cod_orders.Order_Id = Order_Header.Id 
WHERE Status = 2 and (Payment_Method_Id != 6 or cod_orders.Is_confirmed = 1)

【讨论】:

  • 返回所有行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2018-11-29
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多