我有两张桌子
src (party_key,is_NRA,is_DOM,is_PEP)
和
dest(party_key,aml_type,aml_name)
我想做的是 -
If src.is_NRA = 1, then insert into dest values (src.party_key,'NRA','Is NRA')
If src.is_DOM = 1, then insert into dest values (src.party_key,'DOM','Is DOM')
.
.
src表中的一行可以将所有3个标志都设置为“1”。在这种情况下,我想在dest表中插入3个单独的行。
我如何在SQL中实现它?
答案 0 :(得分:1)
你去吧
INSERT INTO dest(party_key,aml_type,aml_name)
SELECT src.party_key, 'NRA', 'Is NRA' FROM src WHERE src.is_NRA = 1;
INSERT INTO dest(party_key,aml_type,aml_name)
SELECT src.party_key, 'DOM', 'Is DOM' FROM src WHERE src.is_DOM = 1;
INSERT INTO dest(party_key,aml_type,aml_name)
SELECT src.party_key, 'PEP', 'Is PEP' FROM src WHERE src.is_PEP = 1;
答案 1 :(得分:1)
使用三个单独的SELECT进行插入可能适用于您的目的,但这是三个单独的表扫描。如果您使用UNPIVOT(参考:http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx):
,则可以使用一次表扫描进行插入INSERT INTO
dest (
party_key,
aml_type,
aml_name
)
SELECT
party_key,
RIGHT([type], 3),
'Is ' + RIGHT([type], 3)
FROM
src
UNPIVOT (
flag FOR [type] IN (
is_NRA,
is_DOM,
is_PEP
)
) unpvt
WHERE
flag = 1
答案 2 :(得分:0)
我错过了什么吗?
IF src.is_dom = 1 AND src.is_NRA = 1 AND src.is_PEP = 1,
THEN
INSERT INTO dest (party_key, aml_type, aml_name)
VALUES (src.party_key, 'DOM', 'Is DOM'), (src.party_key,'NRA','Is NRA'), (src.party_key,'PEP','Is PEP')