2016-06-15 14 views
-5

Jeder Name hat mindestens 4 verschiedene td 's. Wenn 01 oder 02 an diesen Namen angehängt ist, möchte ich die td in die td vom letzten Zahltag für diesen Namen ändern.Fall, wenn Anweisung auswählen

Allerdings bekomme ich immer einen NULL Wert. Was ist falsch an dieser Abfrage?

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

Was sagt Ihnen, dass mit der Abfrage etwas nicht stimmt? Ergebnisse? Fehlermeldung? ...? –

+0

Technisch ist nichts falsch mit der Abfrage, die ich denke. Aber ich bekomme immer einen NULL. Ich möchte einen anderen td bekommen. – jerry

+0

Können Sie einige Beispieldaten posten? – Arulkumar

Antwort

3

Sie fehlen eine From-Klausel und eine Korrelationsbedingung in der Unterabfrage.

Ohne einen FROM-Klausel, die in dem td subselect das gleiche wie die td im äußeren select, mit anderen Worten, einen von '01' oder '02' und der WHERE-Klausel-Test der Zeile eliminiert, in einem NULL führte.

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 
Verwandte Themen