1

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

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
4

2 回答 2

1

像这样的东西应该适合你正在做的事情。“案例”语句是这样的选择语句的好方法。

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

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”语句根据那里的逻辑处理将为每一行选择的值。

于 2013-10-10T19:44:21.483 回答
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

或两者

于 2013-10-10T19:45:11.293 回答