2016-12-09 2 views
-2

У меня есть представление в SQL, и мне нужно получить функцию if, ниже - мое утверждение.SQL if function

SELECT TOP (100) PERCENT 
    dbo.SorDetail.MLineShipDate, 
    dbo.SorMaster.SalesOrder, 
    dbo.SorDetail.SalesOrderLine, 
    dbo.SorMaster.CustomerPoNumber, 
    dbo.SorMaster.Customer, 
    dbo.ArCustomer.Name AS CustomerName, 
    dbo.SorMaster.Salesperson, 
    dbo.InvMaster.StockCode, 
    dbo.InvMaster.Description, 
    dbo.InvMaster.ProductClass, 
    dbo.ShortOrderOrigOrderQty.OrderUom, 
    dbo.ShortOrderOrigOrderQty.OrderQty AS OrderQtyOrig, 
    dbo.ShortOrderOrigOrderQty.LineValue AS LineValueOrig,  
    ISNULL(dbo.ShortOrderTrimQty.TrimQty, 0) AS OrderQtyTrim, 
    dbo.SorDetail.MPrice * ISNULL(dbo.ShortOrderTrimQty.TrimQty, 0) AS LineValueTrim, 
    dbo.SorDetail.MOrderQty AS OrderQtyCurrent, 
    dbo.SorDetail.MPrice * dbo.SorDetail.MOrderQty AS LineValueCurrent,  
    dbo.ShortInvoiced.QtyInvoiced AS OrderQtyPicked, 
    ISNULL(dbo.ShortOrderPicked.NetSalesValue, 0) AS LineValuePicked, 
    ISNULL(dbo.ShortInvoiced.QtyInvoiced, 0)/dbo.ShortOrderOrigOrderQty.OrderQty * 100 AS [InFull%], 
    ISNULL(dbo.ShortInvoiced.QtyInvoiced, 0)/dbo.SorDetail.MOrderQty * 100 AS [StockAvailability%], 
    dbo.SorDetail.MWarehouse, 
    dbo.SorDetail.MStockDes, 
    dbo.SorMaster.OrderStatus, 
    dbo.SorMaster.InterWhSale 
    FROM dbo.ShortOrderTrimQty 
    RIGHT OUTER JOIN dbo.SorMaster 
    INNER JOIN dbo.ShortInvoiced ON dbo.SorMaster.SalesOrder = dbo.ShortInvoiced.SalesOrder 
    RIGHT OUTER JOIN dbo.SorDetail ON dbo.ShortInvoiced.SalesOrderLine = dbo.SorDetail.SalesOrderLine 
     AND dbo.ShortInvoiced.SalesOrder = dbo.SorDetail.SalesOrder 
     AND dbo.SorMaster.SalesOrder = dbo.SorDetail.SalesOrder 
    LEFT OUTER JOIN dbo.ShortOrderPicked ON dbo.SorDetail.SalesOrderLine = dbo.ShortOrderPicked.SalesOrderLine 
    AND dbo.SorDetail.SalesOrder = dbo.ShortOrderPicked.SalesOrder 
    ON dbo.ShortOrderTrimQty.SalesOrderLine = dbo.SorDetail.SalesOrderInitLine 
    AND dbo.ShortOrderTrimQty.SalesOrder = dbo.SorDetail.SalesOrder 
    LEFT OUTER JOIN dbo.ShortOrderOrigOrderQty ON dbo.SorDetail.SalesOrderInitLine = dbo.ShortOrderOrigOrderQty.SalesOrderLine 
    AND dbo.SorDetail.SalesOrder = dbo.ShortOrderOrigOrderQty.SalesOrder 
    LEFT OUTER JOIN dbo.InvMaster ON dbo.SorDetail.MStockCode = dbo.InvMaster.StockCode 
    LEFT OUTER JOIN dbo.InvCustProdType ON dbo.SorDetail.MStockCode = dbo.InvCustProdType.KeyField 
    LEFT OUTER JOIN dbo.ArCustomer ON dbo.SorMaster.Customer = dbo.ArCustomer.Customer 
    WHERE (dbo.SorDetail.LineType = '1') 
     AND (dbo.SorMaster.OrderStatus <> '*') 
     AND (dbo.SorMaster.DocumentType IN ('B', 'O')) 
     AND (dbo.SorMaster.Customer <> 'FAC002') 
     AND (dbo.SorMaster.OrderStatus <> '\') 
    ORDER BY dbo.SorMaster.SalesOrder, dbo.SorDetail.SalesOrderLine 

Хорошо так что мне нужно заявление IF сделать следующее:

IF (IntWhSales = Y, then OrderQtyOrig = OrderQtyCurrent) else OrderQtyOrig 

Пожалуйста, помогите мне

+6

Возможный дубликат [Как выполнить IF ... THEN в SQL SELECT] (http://stackoverflow.com/questions/ 63447/how-to-perform-an-if-then-in-an-sql-select) – Heinzi

+0

Вам нужно это делать? Вернуть другой столбец или использовать другой фильтр? Невозможно прочитать этот запрос. Если вы хотите вернуть разные значения, используйте оператор 'CASE WHEN', а не' IF' –

+0

. В будущем вы должны отформатировать код таким образом, чтобы нам не нужно прокручивать влево и вправо. –

ответ

1

Эквивалент IF заявление в SQL для запроса:

CASE 
    WHEN IntWhSales = 'Y' 
     THEN OrderQtyCurrent 
    ELSE OrderQtyOrig 
END 

Вы просто подключите этот c ode в часть запроса SELECT.

SELECT TOP (100) PERCENT dbo.SorDetail.MLineShipDate 
    , dbo.SorMaster.SalesOrder 
    , dbo.SorDetail.SalesOrderLine 
    , dbo.SorMaster.CustomerPoNumber 
    , dbo.SorMaster.Customer 
    ... 
    , CASE 
     WHEN IntWhSales = 'Y' 
      THEN OrderQtyCurrent 
     ELSE OrderQtyOrig 
    END       AS [OrderQuantity] 
FROM dbo.ShortOrderTrimQty 
RIGHT OUTER JOIN dbo.SorMaster 
... 
+0

вам нужно добавить одну котировку к Y sir. –

+0

@MisterPositive Пропустил это, спасибо. –

0

Добавьте это в отборного заявления:

Case IntWhSales = 'Y' Then OrderQtyCurrent Else OrderQtyOrig End AS [OrderQuantity]