Вот мой вопрос. Я хочу принять выражение 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 данных в числовой»
Любая мысль о том, как я могу это исправить?
Спасибо,
У вас есть '' MARKET VALUE'', который является 'varchar' по сравнению с цифрами –
' C.SETTLEBalance * 1.40 = '0.00''? Без схем это вопрос невозможно интерпретировать. – HABO
Я не уверен, почему я голосую за вопрос. Не все здесь - эксперты. Пожалуйста, не думайте, что каждый, задающий вопросы, знает, как запросить или даже как SQL должен работать. Я стараюсь добавить как можно больше контента к вопросу, не отказываясь от безопасности своей компании. Я понял это с помощью CTE, и я отправлю свой ответ ниже. – BIReportGuy