Проблема выписки в хранимой процедуре - PullRequest
0 голосов
/ 06 октября 2011

Вот часть моего запроса select, которую я пытаюсь использовать с оператором 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, 

Я продолжаю получать сообщения об ошибках рядом сКАК в моем случае заявление?Можно ли использовать операторы case в середине запроса?Я хочу, чтобы для всех resstatus A и X все тянулось одинаково, за исключением общего количества, это был бы лучший способ сделать это?Я использую функцию fn_getxmlvalue, потому что отмененная информация хранится в xml.

Ответы [ 4 ]

2 голосов
/ 06 октября 2011

Переместите псевдоним as total после END оператора 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)) 
       ELSE  (SUM(SoftripNetTest.dbo.ResGeneral.TTlQuotePrice + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceTax + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceGST)
    END   as total
2 голосов
/ 06 октября 2011
         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

0 голосов
/ 06 октября 2011

удалить псевдоним «как общее» из следующей строки:

ELSE  (SUM(SoftripNetTest.dbo.ResGeneral.TTlQuotePrice + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceTax + SoftripNetTest.dbo.ResGeneral.TTlQuotePriceGST)  as total
        END 
0 голосов
/ 06 октября 2011

Просто удалите as total в середине CASE.

Оператор CASE выведет одно поле в конце, и вы назовете его ПОСЛЕ КОНЦА :

CASE WHEN ...
     WHEN ...
     ELSE ...
END as 'Blah'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...