简体   繁体   English

SQL Server插入中的同一列检查

[英]Same Column check in SQL Server insert

I have a table dom with these two columns ( FLAT_AMOUNT , FLAT_PERCENTAGE ). 我的表dom包含这两列( FLAT_AMOUNTFLAT_PERCENTAGE )。

I am going to insert data into the table dom : 我将数据插入表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 

I hope you got my point. 我希望你明白我的意思。 Is there a possible way to check same column values in the table to make insert for other column? 有没有一种方法可以检查表中的相同列值以插入其他列?

If I have understood your question correctly this is what you want done: 如果我正确理解了您的问题,这就是您想要做的

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;

If I understand correctly, you can repeat the logic: 如果我理解正确,则可以重复以下逻辑:

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 ;

Alternatively, you can use a subquery, CTE, or even outer apply so your query doesn't have to repeat logic: 另外,您可以使用子查询,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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM