Ich hatte eine gespeicherte Prozedur, die langsam war (und neue Daten fehlte), ich muss es schneller machen, also habe ich dieses Mal ein CTE (beim ersten Mal).SQL Server CTE-Fehler in der Gruppe Von
Der alte war
Declare @Cod_Func as int;
set @Cod_Func = 10310
BEGIN
SELECT
D.Cod_Regional,
D.Nom_Regional + ' (' + CAST(COUNT(A.ID_Chegada) as varchar) + ')' as Nom_Regional
FROM
APS_CHEGADA A (NOLOCK)
INNER JOIN
APS_AcessoFilial B (NOLOCK) ON A.Cod_Regional = B.Cod_Regional
AND A.Cod_Filial = B.Cod_Filial
AND B.flg_situacao = 1
INNER JOIN
COR_Filial C (NOLOCK) ON A.Cod_Regional = C.Cod_Regional
AND A.Cod_Filial = C.Cod_Filial
INNER JOIN
COR_Regional D (NOLOCK) ON C.Cod_RegionalAtual = D.Cod_Regional
WHERE
A.ID_ChegadaStatus = 2
AND B.Cod_Func = @Cod_Func
AND A.FLG_SITUACAO = 1
GROUP BY
D.Cod_Regional, D.Nom_Regional
End;
Und der neue ist:
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
WITH tblRegionais AS
(
SELECT DISTINCT
[R].COD_Regional,
[F].COD_Regional AS [COD_RegionalReal],
[R].Nom_Regional
FROM
COR_Regional [R] WITH(NOLOCK)
INNER JOIN
COR_FILIAL [F] WITH(NOLOCK) ON [R].COD_REGIONAL = [F].COD_RegionalAtual
INNER JOIN
APS_AcessoFilial [AF] WITH(NOLOCK) ON [F].COD_Regional = [AF].COD_Regional
AND [F].COD_Filial = [AF].COD_Filial
WHERE
[F].FLG_SituacaoRegistro = 1
AND [AF].FLG_Situacao = 1
AND [AF].COD_Func = @COD_Func
),
tblChegadas AS
(
SELECT
[R].COD_Regional,
COUNT([C].ID_Chegada) AS [QTD_Chegada]
FROM
tblRegionais [R]
INNER JOIN
APS_Chegada [C] WITH(NOLOCK) ON [R].COD_RegionalReal = [C].COD_Regional
WHERE
[C].ID_ChegadaStatus = 2
GROUP BY
[R].COD_Regional
),
tblSaida AS
(
SELECT
[R].COD_Regional,
RTRIM([R].Nom_Regional) + ' (' + CAST([C].QTD_Chegada AS VARCHAR(30)) + ')' AS [NOM_Regional]
FROM
tblRegionais [R]
INNER JOIN
tblChegadas [C] ON [R].COD_Regional = [C].COD_Regional
)
SELECT
[S].COD_Regional,
[S].NOM_Regional
FROM
tblSaida [S];
END
Das Problem ist die neue viermal jetzt langsamer ist, und das Ergebnis ist nicht in einer Gruppe wie die Letzter, aber ich benutze die Gruppe von "tblChegada".
Ich füge auch die beiden Bilder mit der Zeit der Ausführung
Was ist Ihre Frage genau? Es ist in Bezug auf die Ausführungszeit oder die Gruppierung? – dfundako
CTEs sind eine bequeme Syntax oder bieten neue Funktionen (rekursive CTEs). Sie sollten jedoch keinen Einfluss auf die Leistung in SQL Server haben. –
Beide, aber die, die ich wirklich wissen will, warum es nicht richtig gruppiert, das ist das größere Problem, die Ausführungszeit werde ich weiterhin versuchen, mit kleinen Änderungen zu verbessern. –