2016-12-27 82 views
-17

如果条件等于真,那么我想乘 (od.price * od.kilo),然后带动其他领域其他 子查询返回的值超过1。错误的if语句

我想乘(od.quant * od.price ),然后带动其他领域

CREATE PROC GET_ORDER_ACCOUNT_DETAILS @ORDERID INT

AS 
BEGIN 
     IF((SELECT calcType FROM orderDetailsTBL od WHERE od.orderID = @ORDERID) = 'K') 
      BEGIN 
      SELECT 
      (SELECT od.price * od.kilo FROM orderDetailsTBL od) as "AMOUNT", 

      od.quant as "QUANTITY" , 
      od.kilo as "KILO" , 
      od.price as "PRICE" , 
      od.calcType as "UNIT" , 
      p.prodName as "NAME" , 
      od.recivedID as "RECIVED" 
FROM orderAccTBL oa 
JOIN orderDetailsTBL od ON od.orderID = oa.orderID 
JOIN productTBL p ON p.prodID = od.productID 
WHERE 
     oa.orderID = @ORDERID 
        END 
      ELSE 

      BEGIN 
      SELECT 
      (SELECT od.quant * od.price FROM orderDetailsTBL od) as "AMOUNT", 
      od.quant as "QUANTITY" , 
      od.kilo as "KILO" , 
      od.price as "PRICE" , 
      od.calcType as "UNIT" , 
      p.prodName as "NAME" , 
      od.recivedID as "RECIVED" 
FROM orderAccTBL oa 
JOIN orderDetailsTBL od ON od.orderID = oa.orderID 
JOIN productTBL p ON p.prodID = od.productID 
WHERE 
     oa.orderID = @ORDERID 
      END 

    END  
+3

您需要解释您的问题是什么,并提出具体问题。 – bwoogie

回答

1

你不需要任何这些的if..else陈述或者甚至在你选择的子查询,你是什么之后,才能实现用以下简单的选择查询:

CREATE PROC GET_ORDER_ACCOUNT_DETAILS 
@ORDERID INT 
AS 
BEGIN 
SET NOCOUNT ON; 

    SELECT 
      CASE 
       WHEN od.calcType = 'K' 
       THEN od.price * od.kilo 
       ELSE od.quant * od.price 
      END   as [AMOUNT] 
     ,od.quant  as [QUANTITY] 
     ,od.kilo  as [KILO] 
     ,od.price  as [PRICE] 
     ,od.calcType as [UNIT] 
     ,p.prodName as [NAME] 
     ,od.recivedID as [RECIVED] 
    FROM  orderAccTBL  oa 
    INNER JOIN orderDetailsTBL od ON od.orderID = oa.orderID 
    INNER JOIN productTBL  p ON p.prodID = od.productID 
    WHERE oa.orderID = @ORDERID 

END 
+0

@ORDERID附近的语法错误 –

+0

@MohamedHmmam我刚刚在编译器中检查了查询,它没有显示任何语法错误,在测试之前是否对查询进行了任何更改? –

+0

谢谢,这是小错误,现在它的工作很好 非常感谢你,对不起我的英语不好的技巧 –