2017-09-19 1 views
2

ich MS zitiert:Kreuze Erträge nulls

CROSS APPLY gibt nur Zeilen aus der äußeren Tabelle, die ein Ergebnis erzeugt aus der Tabellenwertfunktion eingestellt.

Dies würde bedeuten, dass es keine Zeilen mit Nullwerten zurückgeben würde, oder? jedoch meine Frage ist:

select ....,cat_custom,.... 
from ...(various inner joins)...     
cross apply 
       (
        select 
         case 
          when i.cat1='01' then 1 
          when i.cat2='04' then 2 
          when i.cat2='07' then 3 
          when i.cat2 in ('08') or i.cat3 in ('014','847') then 4 
          else null 
         end as cat_custom 
       ) as cat_custom_query 

... und sicher genug, ich Zeilen mit NULL-Werten. Wäre das nicht der Job von OUTER apply? Was ist los?

Antwort

4

CROSS APPLY gibt nur Zeilen aus der äußeren Tabelle zurück, die aus der Tabellenwertfunktion eine Ergebnismenge ergeben.

In Ihrem Beispiel wird eine Zeile erzeugt - Zeile, die einen NULL Wert zurückgibt.

Sie können dies versuchen:

select ....,cat_custom,.... 
from ...(various inner joins)...     
cross apply 
       (
        select 
         case 
          when i.cat1='01' then 1 
          when i.cat2='04' then 2 
          when i.cat2='07' then 3 
          when i.cat2 in ('08') or i.cat3 in ('014','847') then 4 
          else null 
         end as cat_custom 
        WHERE i.cat1 IN ('01', '04', '07', '08', '014', '847') 
       ) as cat_custom_query 

Auch wenn diese Teil der eigentlichen Abfrage ist, können Sie die Ergebnisspalte in der SELECT Anweisung hinzufügen. Sie müssen CROSS APPLY hier nicht verwenden, da Sie keine SQL-Objekte (Tabellen, Sichten, Funktionen usw.) beziehen.

+0

Ich habe derzeit ein wo cat_custom ist nicht null nach der Abfrage, so werde ich es so lassen, aber zumindest jetzt weiß ich, was passiert. Ein Detail, das zählt! Danke für deine Antwort. –