Sql server SQL if函数

Sql server SQL if函数,sql-server,sql-server-2008,if-statement,Sql Server,Sql Server 2008,If Statement,我在SQL中有一个视图,我需要在其中获得一个if函数,下面是我的语句 SELECT TOP (100) PERCENT dbo.SorDetail.MLineShipDate, dbo.SorMaster.SalesOrder, dbo.SorDetail.SalesOrderLine, dbo.SorMaster.CustomerPoNumber, dbo.SorMaster.Customer, dbo.ArCustomer.

我在SQL中有一个视图,我需要在其中获得一个if函数,下面是我的语句

    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

请帮助我

对于您的请求,SQL中等价的
IF
语句是:

CASE 
    WHEN IntWhSales = 'Y'
        THEN OrderQtyCurrent
    ELSE OrderQtyOrig
END
您只需将此代码插入查询的
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
...

将此添加到select语句中:

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

可能重复的你需要这个做什么?返回不同的列或使用不同的筛选器?无法阅读此查询。如果您想返回不同的值,请使用
CASE WHEN
语句,而不是
If
,您应该以这样一种方式格式化代码,即不必从左向右滚动。正如您所知,视图中的
ORDER BY
的唯一目的是完成其他功能的定义(这里,
TOP
)。它不能以任何方式保证在查询此视图时返回行的顺序。而且,现在的优化器足够聪明,知道当要求它执行
TOP 100%
时,它不需要进行任何排序。您需要将单引号添加到Y sir中。
Case IntWhSales = 'Y' Then OrderQtyCurrent Else OrderQtyOrig End AS [OrderQuantity]