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