簡體   English   中英

存儲過程中的案例聲明問題

[英]Case statement issue in stored procedure

這是我嘗試使用case語句的部分選擇查詢

CASE SoftripNetTest.dbo.ResGeneral.ResStatus
   WHEN 'X' THEN CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePrice', 0) AS DECIMAL(18, 2)) 
           + CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePriceTax', 0) AS DECIMAL(18, 2)) 
           + CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePriceGST', 0) AS DECIMAL(18, 2)) 
       as total                       
   ELSE  (SUM(SoftripNetTest.dbo.ResGeneral.TTlQuotePrice + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceTax + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceGST)  as total
END 

這就是整個查詢

SELECT     
    SoftripNetTest.dbo.ResGeneral.ResNumber, SoftripNetTest.dbo.ResGeneral.LeadName, 
    SoftripNetTest.dbo.ResGeneral.NoPax, SoftripNetTest.dbo.ResGeneral.MarketCode, 
    SoftripNetTest.dbo.ResGeneral.ResProductCode, SoftripNetTest.dbo.ResGeneral.ResTourCode, 
    SoftripNetTest.dbo.ResGeneral.SellMethod, SoftripNetTest.dbo.ResGeneral.DepDate, 
    CONVERT(datetime, SoftripNetTest.dbo.ResGeneral.BookDate, 101) AS bookdate, 
    SoftripNetTest.dbo.ResGeneral.BookedBy, 
    CASE SoftripNetTest.dbo.ResGeneral.ResStatus
       WHEN 'X' THEN CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePrice', 0) AS DECIMAL(18, 2)) 
          + CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePriceTax', 0) AS DECIMAL(18, 2)) 
          + CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePriceGST', 0) AS DECIMAL(18, 2)) 
       ELSE  (SUM(SoftripNetTest.dbo.ResGeneral.TTlQuotePrice + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceTax + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceGST) 
    END,
    SoftripNetTest.dbo.Product.ProductName, SoftripNetTest.dbo.ResGeneral.ParentResNumber, 
    SoftripNetTest.dbo.ResGeneral.ResStatus, 
    dbo.ResItinerary_insurance.LocalCost * dbo.ResItinerary_insurance.Qty AS insurance
FROM         
    SoftripNetTest.dbo.ResGeneral 
INNER JOIN
    SoftripNetTest.dbo.Product ON SoftripNetTest.dbo.ResGeneral.ResProductCode = SoftripNetTest.dbo.Product.ProductCode 
LEFT OUTER JOIN
    dbo.ResItinerary_insurance ON SoftripNetTest.dbo.ResGeneral.ResNumber = dbo.ResItinerary_insurance.ResNumber
WHERE     
    (SoftripNetTest.dbo.ResGeneral.BookDate BETWEEN @startdate AND @enddate)
GROUP BY 
    SoftripNetTest.dbo.ResGeneral.ResNumber, SoftripNetTest.dbo.ResGeneral.LeadName, 
    SoftripNetTest.dbo.ResGeneral.NoPax, SoftripNetTest.dbo.ResGeneral.MarketCode, 
    SoftripNetTest.dbo.ResGeneral.ResProductCode, SoftripNetTest.dbo.ResGeneral.ResTourCode, 
    SoftripNetTest.dbo.ResGeneral.SellMethod, SoftripNetTest.dbo.ResGeneral.DepDate, $
    SoftripNetTest.dbo.ResGeneral.BookDate, SoftripNetTest.dbo.ResGeneral.BookedBy, 
    SoftripNetTest.dbo.ResGeneral.BookSource, SoftripNetTest.dbo.Product.ProductName, 
    SoftripNetTest.dbo.ResGeneral.ParentResNumber, SoftripNetTest.dbo.ResGeneral.ResStatus, 

在我的案例陳述中,AS附近經常出現錯誤? 案例語句可以在查詢中間使用嗎? 我希望對狀態A和X的所有內容都以相同的方式提取,但總和是最好的方法嗎? 我正在使用fn_getxmlvalue這是一個函數,因為已取消的信息存儲在xml中。

         CASE SoftripNetTest.dbo.ResGeneral.ResStatus
       WHEN 'X' THEN CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePrice', 0) AS DECIMAL(18, 2)) 
                          + CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePriceTax', 0) AS DECIMAL(18, 2)) 
                          + CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePriceGST', 0) AS DECIMAL(18, 2)) 

       ELSE  (SUM(SoftripNetTest.dbo.ResGeneral.TTlQuotePrice + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceTax + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceGST)  as total
    END 
    as total   

您不能命名case語句的各個部分,但可以命名結果列,只需將名稱移至case語句的末尾即可

將別名as total別名CASE語句的END之后。

         CASE SoftripNetTest.dbo.ResGeneral.ResStatus
       WHEN 'X' THEN CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePrice', 0) AS DECIMAL(18, 2)) 
                          + CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePriceTax', 0) AS DECIMAL(18, 2)) 
                          + CAST(SoftripNetTest.dbo.fn_GetXMLValue(SoftripNetTest.dbo.fn_GetXMLValue(AdditionalData, 'HeaderCancellationData', ''), 'TotalQuotePriceGST', 0) AS DECIMAL(18, 2)) 
       ELSE  (SUM(SoftripNetTest.dbo.ResGeneral.TTlQuotePrice + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceTax + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceGST)
    END   as total

只需刪除CASE中間的as total

CASE語句將在末尾輸出一個字段,並將其命名為AFTER THE END

CASE WHEN ...
     WHEN ...
     ELSE ...
END as 'Blah'

從以下行中刪除“總計”別名:

ELSE  (SUM(SoftripNetTest.dbo.ResGeneral.TTlQuotePrice + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceTax + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceGST)  as total
        END 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM