从具有列条件的另一个表插入

时间:2013-10-10 19:21:51

标签: sql

我正在尝试将提交表中的所有数据插入到我的事实表中。除状态列外,所有字段都排成一行。状态表需要填写基于日期的状态。我有我需要的规则,但我不确定我应该把这个逻辑放在哪里,甚至不知道怎么做。任何帮助表示赞赏。

Insert into dbo.FactSubmit
(
    ProjectKey,
    DueFromSubKey,
    SentToKey,
    DueFromArcKey,
    ReceivedDateKey,
    [Description],
            Status

)
Select 
    dp.ProjectKey,
    CONVERT(int, Convert(varchar, s.Due_From_Sub ,112)),
    CONVERT(int, Convert(varchar,s.Sent_To, 112)),
    CONVERT(int, Convert(varchar,s.Due_From_Arc, 112)),
    CONVERT(int, Convert(varchar,s.ReceivedDate, 112)),
    s.Item_Description
From stg.Submit s
INNER JOIN dbo.DimProject dp
    ON s.ProjectID = dp.ProjectID
INNER JOIN stg.Project sp
    ON sp.ProjectID = dp.ProjectID

2 个答案:

答案 0 :(得分:1)

这样的事情应该适合你正在做的事情。对于那样的select语句,“Case”语句是一种很好的方法。

您可以根据需要进行所需的选择,确保列匹配,并且您可以插入它们

SELECT ..., 'Status' = CASE               --selecting what columns
     WHEN SomeColumn = 50 THEN 'Status1'  --this sets the logic 
     WHEN SomeColumn = 51 THEN 'Status2'  --for your case statement
     ELSE 'DefaultStatusValue'
  END
FROM stg.Submit s
INNER JOIN dbo.DimProject dp
ON s.ProjectID = dp.ProjectID
INNER JOIN stg.Project sp
ON sp.ProjectID = dp.ProjectID),

引用另一个StackQuestion

MSDN也可以提供帮助

编辑:引号中的“状态”表示您希望新列名称是什么,“Case”语句根据其中的逻辑处理每行的选择值。

答案 1 :(得分:0)

你要么想要一个where子句:

insert into table2
(f1, f2, etc)
select f1, f2, etc
from table1
WHERE YOUR CONDITIONS ARE MET

或案例构造

insert into table2
(f1, f2)
select f1
, CASE WHEN A CONDITION IS MET THEN VALUE1 ELSE VALUE2  END

或两者