根据其他表的标志值插入表中

时间:2014-05-29 17:33:44

标签: sql sql-server insert case flags

我有两张桌子

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中实现它?

3 个答案:

答案 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')