[英]Same Column check in SQL Server insert
我的表dom
包含这两列( FLAT_AMOUNT
, FLAT_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.