;WITH cte AS
(
SELECT DISTINCT
a.ID, a.code AS code, DATEPART(wk, INVCDATE) weekno,
(SELECT CONVERT(DATE, (SELECT CONVERT(DATEtime, v.invcdate) - DATEPART(dw, CONVERT(varchar, CONVERT(DATE, v.invcdate)))) + 1)) MinDateOfWeek,
(SELECT CONVERT(DATE, (SELECT CONVERT(DATEtime, v.invcdate) + (7 - DATEPART(dw, CONVERT(varchar, CONVERT(DATE, v.invcdate))))))) ADA
FROM
dbo.abc a
INNER JOIN
dbo.xyz b ON a.ID = b.ID
INNER JOIN
dbo.PLIST p ON a.ID = p.ID
INNER JOIN
dbo.VISITS v ON p.ID2 = v.ID2
INNER JOIN
dbo.UserList o ON o.ID = a.ID
)
SELECT
code, weekno, k.Id4, k.Id3, k.Id2, k.Id1, k.Id0
FROM
cte
CROSS APPLY
dbo.f_getmycount(ID, MinDateOfWeek, ADA) k
Die obige Abfrage benötigt zu viel Zeit.Kreuz Anwenden der Tabelle Überarbeitete Funktion nimmt zu viel Zeit in Anspruch
Ich brauche Vorschläge, die Kreuz anwenden Tabelle Funktion ist effizient oder nicht.
Jede Hilfe wird geschätzt.
Dank
Welche Art von Funktion ist 'f_getmycount()'? Eine Skalarfunktion, eine Inline-Tabellenwertfunktion oder eine Tabellenfunktion mit mehreren Anweisungen? Aufgrund der Verwendung würde ich annehmen, dass es kein Skalar ist, aber ich war schon vorher überrascht. :) –
Zeigen Sie den (reduzierten?) Code Ihrer Funktion an und geben Sie einige Details zu Ihren Tabellen und Indizes an. Haben Sie bereits versucht, den Ausführungsplan zu analysieren? – Shnugo
Hi Ben, Es ist eine Tabellenwertfunktion. @Shnugo - Ich habe versucht, Indizes anzuwenden und Änderungen erfolgen gemäß den Ausführungsplan-Eingaben. Trotzdem wird es mehr Zeit. – jitu