[英]Same Column check in SQL Server insert
I have a table dom
with these two columns ( FLAT_AMOUNT
, FLAT_PERCENTAGE
). 我的表
dom
包含这两列( FLAT_AMOUNT
, FLAT_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.