2016-06-15 2 views
-5

Каждое имя имеет не менее 4 разных td. Когда 01 или 02 прикреплено к этому имени, я хочу изменить td на td с последней даты оплаты для этого имени.Дело при выборе заявления

Однако, я продолжаю получать значение NULL. Что не так с этим запросом?

SELECT 
    name, 
    CASE WHEN td in ('01', '02') 
     THEN (SELECT TOP 1 td 
       WHERE td not in ('01', '02') 
       ORDER BY paydate DESC) 
     ELSE td 
    END 
FROM tdtest 
+0

Что скажет вам, что что-то не так с запросом? Результаты? Сообщение об ошибке? ...? –

+0

Технически, ничего плохого в вопросе, который я предполагаю. Но я продолжаю получать NULL. Я хочу получить другой тд. – jerry

+0

Не могли бы вы разместить некоторые данные образца? – Arulkumar

ответ

3

Вам не хватает условия from и условия корреляции в подзапросе.

Без из пункта, то td в подвыборках является таким же, как в td наружных выберите, другие слова, один из '01' или '02' и где тест раздела исключает строку, в результате NULL.

SELECT 
    name, 
    CASE WHEN td in ('01', '02') 
     THEN (SELECT TOP 1 td 
       FROM TdTest InnerTDTest -- table to look in 
       WHERE InnerTDTest.Name = TDTest.Name -- only look at matching rows. 
       AND td not in ('01', '02') 
       ORDER BY paydate DESC) 
     ELSE td 
    END 
FROM tdtest 
Смежные вопросы