繁体   English   中英

SQL Server插入中的同一列检查

[英]Same Column check in SQL Server insert

我的表dom包含这两列( FLAT_AMOUNTFLAT_PERCENTAGE )。

我将数据插入表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 

我希望你明白我的意思。 有没有一种方法可以检查表中的相同列值以插入其他列?

如果我正确理解了您的问题,这就是您想要做的

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;

如果我理解正确,则可以重复以下逻辑:

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;

暂无
暂无

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

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