2016-04-19 22 views
1

Ich habe eine Ansicht wie folgt aus:SQL Spalten auswählen .. Wenn NULL dann andere Spalten auswählen

ID| Key | Product | Item | Block | Source | Title | Text | Type | H1 | H2 | H3 | 
------------------------------------------------------------------------------- 
1 | 456 | abcd | def | 1 | TP | QWERT | YUIP | tgr | A1 | A2 | A3 | 
2 | 567 | fhrh | klo | 1 | GT | TREWQ | ITGF | trp | A1 | A2 | A3 | 
3 | 891 | ufheu | yut | 2 | FR | WERTY | MNBV | uip |NULL|NULL|NULL| 

Ich möchte einige dieser Spalten in eine vorhandene, leere Tabelle exportieren. Ich möchte die ersten sechs Spalten auswählen und dann die anderen Spalten wie eine Hierarchie von rechts nach links auswählen.

Wenn H1, H2 und H3 NICHT NULL sind, sollten sie in der Ausgabe erscheinen und Titel, Text und Typ sollten NULL sein (obwohl sie Werte enthalten).

Wenn H1, H2 und H3 NULL sind, möchte ich Titel, Text und Typ in der Ausgabe sein.

Es sollte wie folgt sein:

ID| Key | Product | Item | Block | Source | Title | Text | Type | H1 | H2 | H3 | 
------------------------------------------------------------------------------- 
1 | 456 | abcd | def | 1 | TP | NULL | NULL | NULL | A1 | A2 | A3 | 
2 | 567 | fhrh | klo | 1 | GT | NULL | NULL | NULL | A1 | A2 | A3 | 
3 | 891 | ufheu | yut | 2 | FR | WERTY | MNBV | uip |NULL|NULL|NULL| 

Kann mir jemand helfen mit diesem? Hilfe wäre sehr willkommen!

+2

Was passiert, wenn H1 ist nicht null, aber H2 und H3 sind? –

+0

Ihre Logik ist schwer zu folgen. Willst du zum Beispiel sechs zusätzliche Spalten oder nur drei? Was möchten Sie tun, wenn einige Spalten NULL sind, aber nicht alle? –

Antwort

0

Ok , Ich habe alle Spaltennamen in [eckige Klammern] eingeschlossen, weil Sie reservierte Namen (Schlüssel, Text, Typ) verwenden und ich mag Konsistenz, es ist wert, diese Gewohnheit so schnell wie möglich zu brechen.

Wenn Ihr Kriterium ist, dass alle drei Spalten (H1, H2, H3) NULL sein müssen, dann werden Sie so etwas wollen;

SELECT [ID] 
    ,[key] 
    ,[Product] 
    ,[Item] 
    ,[Block] 
    ,[Source] 
    ,CASE 
     WHEN H1 IS NULL 
      AND H2 IS NULL 
      AND H3 IS NULL 
      THEN [Title] 
     ELSE NULL 
     END AS [Title] 
    ,CASE 
     WHEN H1 IS NULL 
      AND H2 IS NULL 
      AND H3 IS NULL 
      THEN [Text] 
     ELSE NULL 
     END AS [Text] 
    ,CASE 
     WHEN H1 IS NULL 
      AND H2 IS NULL 
      AND H3 IS NULL 
      THEN [Type] 
     ELSE NULL 
     END AS [Type] 
    ,H1 
    ,H2 
    ,H3 
FROM DataTable 
+0

Gerne helfen :) –

3

Wenn Sie den Vergleich Spalte für Spalte wollen, dann coalesce() verwenden:

select ID, Key, Product, Item, Block, Source, 
     (case when h1 is not null then null else title end) as title, 
     (case when h2 is not null then null else text end) as text, 
     (case when h3 is not null then null else type end) as type, 
     coalesce(h1, title) as h1, 
     coalesce(h2, text) as h2, 
     coalesce(h3, type) as h3 
from t; 

Aber ich bin nicht sicher, ob Sie alle drei Spalten gleichzeitig bedeuten:

select ID, Key, Product, Item, Block, Source, 
     (case when h1 is null and h2 is null and h3 is null then title end) as title, 
     (case when h1 is null and h2 is null and h3 is null then text end) as text, 
     (case when h1 is null and h2 is null and h3 is null then type end) as type, 
     (case when h1 is null and h2 is null and h3 is null then NULL else h1 end) as h1, 
     (case when h1 is null and h2 is null and h3 is null then NULL else h2 end) as h2, 
     (case when h1 is null and h2 is null and h3 is null then NULL else h3 end) as h3 
from t; 
+0

Ja ich brauchte alle Spalten zur gleichen Zeit, funktioniert super, außer für die Spalten-Aliase (Titel, Text, Typ), aber das ist nichts .. Vielen Dank für Ihre Hilfe! –

0

Versuchen mit diesem (Verkettungs wird null zurück, wenn Wert null ist)

--When H1,H2 and H3 Null 
Declare @H1 AS Varchar(50)=NULL 
     ,@H2 AS Varchar(50)=NULL 
     ,@H3 AS Varchar(50)=NULL 
     ,@Title AS Varchar(50)='Title' 
     ,@Text AS Varchar(50)='Text' 
     ,@Type AS Varchar(50)='Type' 

SELECT ISNULL(@[email protected][email protected],@Title) Title 
     ,ISNULL(@[email protected][email protected],@Text) [Text] 
     ,ISNULL(@[email protected][email protected],@Type) [Type] 
     ,@H1 H1 
     ,@H2 H2 
     ,@H3 H3 

Wenn H1, H2 oder H3 hat einen Wert

Declare @H1 AS Varchar(50)='H1' 
     ,@H2 AS Varchar(50)='H2' 
     ,@H3 AS Varchar(50)='H3' 
     ,@Title AS Varchar(50)='Title' 
     ,@Text AS Varchar(50)='Text' 
     ,@Type AS Varchar(50)='Type' 

SELECT CASE ISNULL(@[email protected][email protected],'') WHEN '' THEN @Title ELSE Null END Title 
     ,CASE ISNULL(@[email protected][email protected],'') WHEN '' THEN @Text ELSE Null END [Text] 
     ,CASE ISNULL(@[email protected][email protected],'') WHEN '' THEN @Type ELSE Null END [Type] 
     ,@H1 H1 
     ,@H2 H2 
     ,@H3 H3     
Verwandte Themen