2016-02-05 2 views
-1

Вот мой вопрос. Я хочу принять выражение Case [Market Value] и добавить его в выражение «Certified» Case.TSQL Как преобразовать varchar в числовое значение в случае Case

DECLARE @AS_OF_DATE DATE 
SET @AS_OF_DATE = '01/27/2016' 

SELECT 
    'AS OF DATE' = @AS_OF_DATE 
, A.AcctNbr 
, A.CUSIPNumber 
, B.Desc1 
, B.Symbol 
, 'SEC TYPE' = RTRIM (B.SecType)+B.CmpQual+B.SecQual 
, A.AcctType 
, A.LocMemo 
, A.BegSdQuantity 
, B.ClosePrice 
, [MARKET VALUE] = (CASE WHEN RTRIM (B.SECTYPE)+B.CmpQual+B.SecQual IN ('A01', 'A02', 'B01', 'B02', 'C01', 'C02', 'F01', 'F02', 'F03', 
    'F04', 'F05', 'F06', 'G01', 'G02', 'G03', 'G04', 'H01', 'H02', 'T01', '501', '502', '503', '504', '601', '602', '603') 
    THEN CONVERT(DECIMAL(25,3),A.BegSdQuantity * B.ClosePrice) 
    ELSE CONVERT(DECIMAL(25,3),A.BegSdQuantity /100 * B.ClosePrice) END) 
, 'TOTAL DEBIT' = C.SETTLEBalance 
, 'HYPOTHECATION' = C.SETTLEBalance * 1.40 
, 'CERTIFIED'  = (CASE WHEN ((('MARKET VALUE') < (C.SETTLEBalance * 1.40)) OR 
         (C.SETTLEBalance * 1.40 = '0.00')) THEN 'CERTIFIED' 
         ELSE 'EXCEPTION' 
         END) 

FROM vw_Table A 
INNER join vw_Table B on A.FirmCUSIPId = B.FirmCUSIPId 
    AND @AS_OF_DATE between a.EffectiveDate and a.ExpirationDate 
    AND @AS_OF_DATE between b.EffectiveDate and b.ExpirationDate 
INNER JOIN vw_Table C ON A.FirmAccountId = C.FirmAccountId 
    AND @AS_OF_DATE BETWEEN C.EffectiveDate AND C.ExpirationDate 

При запуске этого запроса выше, я получаю сообщение об ошибке: «Ошибка преобразования типа VARCHAR данных в числовой»

Любая мысль о том, как я могу это исправить?

Спасибо,

+0

У вас есть '' MARKET VALUE'', который является 'varchar' по сравнению с цифрами –

+0

' C.SETTLEBalance * 1.40 = '0.00''? Без схем это вопрос невозможно интерпретировать. – HABO

+0

Я не уверен, почему я голосую за вопрос. Не все здесь - эксперты. Пожалуйста, не думайте, что каждый, задающий вопросы, знает, как запросить или даже как SQL должен работать. Я стараюсь добавить как можно больше контента к вопросу, не отказываясь от безопасности своей компании. Я понял это с помощью CTE, и я отправлю свой ответ ниже. – BIReportGuy

ответ

2

Здесь

CASE WHEN ((('MARKET VALUE') < (C.SETTLEBalance * 1.40)) 

Вы сравниваете значение VARCHAR "рыночной стоимости" против числового значения. что вы ожидаете?

Может быть, что вы должны поставить закрывающую paranthesis сразу за «A.BegSdQuantity», не знаю, какие типы данных есть ...:

CONVERT(DECIMAL(25,3),A.BegSdQuantity) * B.ClosePrice 

Но без знания деклараций вашей таблицы это чтение волшебной стеклянной колбы ...

Смежные вопросы