这是我的 SQL 查询:
SELECT
b.MaakArtikel,
b.Bewerking,
[pp].dbo.WORKINGDAYADD('2013-06-27 00:00:00.000',0-b.Startdag_backwards) AS Startdatum,
i.Class_06 AS Afdeling,
b.Minuten*10+ISNULL(br.Tijd,0) AS Minuten,
1+ISNULL(br.Orders,0) AS Aantal
FROM [pp].dbo.VW_BEWERKINGSTRUCTUUR b
LEFT OUTER JOIN [211].dbo.Items i
ON b.MaakArtikel = i.ItemCode
LEFT OUTER JOIN [pp].dbo.VW_BEZETTING_RAW br
ON [pp].dbo.WORKINGDAYADD('2013-06-27 00:00:00.000',0-b.Startdag_backwards) = br.Start
AND i.Class_06 = br.Afdeling
WHERE MaakArtikel = 'HT 10.038'
查询工作正常,但速度有点慢。那是因为我的第二个OUTER JOIN
. Startdatum
我必须通过(在第 4 行选择)加入视图。由于它不是真正的列名,我不能直接在我的OUTER JOIN
. 这意味着该功能[pp].dbo.WORKINGDAYADD()
必须被触发两次(一次在我的选择中没有问题,一次在我的选择OUTER JOIN
中是双重工作)。
我可以编写一个存储过程并[pp].dbo.WORKINGDAYADD()
在变量中使用函数的结果,但这并不令人讨厌。有没有办法在我的OUTER JOIN
表达中使用 Startdatum?或者我真的必须为此使用存储过程吗?