2016-06-17 13 views
0

Ich habe eine Tabelle dom mit diesen zwei Spalten (FLAT_AMOUNT, FLAT_PERCENTAGE).Gleiche Spalte überprüfen in SQL Server einfügen

Ich werde Daten in die Tabelle dom einzufügen:

INSERT INTO Dom(FLAT_AMOUNT, FLAT_PERCENTAGE) 
    SELECT 
     CASE 
      WHEN FLAT_PERCENTAGE = 0 THEN 0 
     END AS FLAT_AMOUNT, 
     CASE 
      WHEN PN_TYPE = 'AD' THEN 0 
      WHEN PN_TYPE = 'OD' THEN 1 
      WHEN PN_TYPE IN('SB', 'FP', 'AM', 'G') THEN 2 
      ELSE 0 
     END AS FLAT_PERCENTAGE 
    FROM 
     PENNUM 

Ich hoffe, Sie haben meinen Punkt. Gibt es eine Möglichkeit, dieselben Spaltenwerte in der Tabelle zu überprüfen, um eine Einfügung für eine andere Spalte vorzunehmen?

+0

Domnic Ihre sele ct-Anweisung fehlt die FROM-Klausel, Es fehlte auch das Komma nach der ersten case-Anweisung (ich füge es dort für Sie ein). Können Sie Ihre Anfrage zeigen und ich könnte Ihnen vielleicht helfen? –

+0

Ich habe die Skripte pls chk bearbeitet – Domnic

Antwort

0

Wenn ich Ihre Frage richtig verstanden habe ist das, was Sie getan werden soll:

INSERT INTO Dom(FLAT_AMOUNT 
       , FLAT_PERCENTAGE) 
     SELECT CASE 
       WHEN FLAT_PERCENTAGE = 0 THEN 0 
      END AS FLAT_AMOUNT 
      , CASE 
       WHEN PN_TYPE = 'AD' THEN 0 
       WHEN PN_TYPE = 'OD' THEN 1 
       WHEN PN_TYPE IN('SB', 'FP', 'AM', 'G') THEN 2 
       ELSE 0 
      END AS FLAT_PERCENTAGE 
     FROM PENNUM AS A 
      LEFT OUTER JOIN Dom AS B ON CASE 
            WHEN A.PN_TYPE = 'AD' THEN 0 
            WHEN A.PN_TYPE = 'OD' THEN 1 
            WHEN A.PN_TYPE IN('SB', 'FP', 'AM', 'G') THEN 2 
            ELSE 0 
            END = B.FLAT_PERCENTAGE 
            AND CASE 
             WHEN A.FLAT_PERCENTAGE = 0 THEN 0 
            END = B.FLAT_PERCENTAGE 
     WHERE B.FLAT_AMOUNT IS NULL 
      AND B.FLAT_PERCENTAGE IS NULL; 
0

Wenn ich richtig verstehe, Sie die Logik wiederholen kann: Alternativ

INSERT INTO Dom(FLAT_AMOUNT,FLAT_PERCENTAGE) 
    SELECT (CASE WHEN PN_TYPE NOT IN ('OD', 'SB', 'FP', 'AM', 'G') THEN 0 
      END) AS FLAT_AMOUNT, 
     (CASE WHEN PN_TYPE = 'AD' THEN 0 
       WHEN PN_TYPE = 'OD' THEN 1 
       WHEN PN_TYPE IN('SB', 'FP', 'AM', 'G') THEN 2 
       ELSE 0 
      END) AS FLAT_PERCENTAGE 
    FROM PENNUM ; 

Sie eine Unterabfrage verwenden können , CTE, oder sogar outer apply, damit Ihre Abfrage die Logik nicht wiederholen muss:

INSERT INTO Dom(FLAT_AMOUNT,FLAT_PERCENTAGE) 
    SELECT (CASE WHEN x.FLAT_PERCENTAGE = 0 THEN 0 
      END) AS FLAT_AMOUNT, 
     x.FLAT_PERCENTAGE 
    FROM PENNUM p OUTER APPLY 
     (SELECT (CASE WHEN p.PN_TYPE = 'AD' THEN 0 
         WHEN p.PN_TYPE = 'OD' THEN 1 
         WHEN p.PN_TYPE IN ('SB', 'FP', 'AM', 'G') THEN 2 
         ELSE 0 
        END) as FLAT_PERCENTAGE 
     ) x;