(对不起,我想不出一个更好的头衔)
我创建了以下select语句(SQL Server)作为视图。
SELECT DISTINCT
dbo.ECB.Currency + '-' +
CAST(dbo.ECB.Date AS varchar(30)) AS ComboDate,
dbo.ECB.Rate AS ECBrate
FROM
dbo.ECB
INNER JOIN
dbo.MyTable ON dbo.ECB.Date = dbo.MyTable.CutoffDate
AND dbo.ECB.Currency = dbo.MyTable.MyCurrency
我的问题:
我注意到我在 CutoffDate 列中有星期六和星期日日期,但ECB
没有日期栏 - 意思是那些日子没有价格。
由于我在Excel计算中使用CutoffDate
,我希望视图能够“替换”周六和周日的日期值与星期五。
我找到了这个工作片段并根据我的需要进行了修改。
SELECT
DISTINCT
CASE WHEN DATEPART(weekday, dbo.CutoffDate) IN (6, 7)
THEN DATEADD(d, -((DATEPART(weekday, dbo.CutoffDate) + 1 + @@DATEFIRST) % 7), dbo.CutoffDate)
ELSE dbo.CutoffDate
END
FROM
MyTable
现在我需要找到一种结合两种结构的方法,这就是我希望你可以帮助我的地方。
我想在我的视图中添加第二个select语句,但未能这样做。
谢谢。答案 0 :(得分:2)
如果您将case
语句移动到联接中,它应该可以正常工作。
更改
dbo.MyTable ON dbo.ECB.Date = dbo.MyTable.CutoffDate
要
dbo.Mytable ON dbo.ECB.Date = case when datepart(weekday, dbo.CutoffDate) IN (6,7)
then dateadd(d, -((datepart(weekday, dbo.CutoffDate) + 1 + @@DATEFIRST) % 7), dbo.CutoffDate)
else dbo.CutoffDate
end
希望这有帮助。