2016-06-17 17 views
0

私はテーブルdomとこれら2つの列(FLAT_AMOUNTFLAT_PERCENTAGE)を持っています。SQL Serverの同じ列のチェック挿入

私はテーブルdomにデータを挿入するつもりです:

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 

私はあなたが私のポイントを得たいと考えています。テーブル内の同じ列の値をチェックして他の列に挿入する方法はありますか?

+0

DomnicあなたSELE ctステートメントにFROM句がありません。最初のcaseステートメントの後にコンマもありませんでした。あなたの質問を表示することができますし、私はあなたを助けることができるかもしれません。 –

+0

スクリプトpls chkを編集しました – Domnic

答えて

0

私は、これはあなたが行って欲しいものである正しくあなたの質問を理解している場合:

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

私が正しく理解していれば、あなたはロジックを繰り返すことができます。また

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 ; 

、あなたはサブクエリを使用することができます、CTE、あるいはouter applyので、あなたのクエリは、ロジックを繰り返す必要はありません。

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; 
関連する問題