GROUP BY, HAVING, or aggregate functions are not allowed in the recursive part of a recursive common table expression ‘%.*ls’.
Error Message:
Msg 467, Level 16, State 1, Line 2
GROUP BY, HAVING, or aggregate functions are not allowed in the recursive part of a recursive common table expression ‘%.*ls’.
Severity level:
16.
Description:
This error message appears when you try to use a GROUP BY or HAVING clause or a subquery in the recursive part of a common table expression.
Consequences:
The T-SQL statement can be parsed, but causes the error at runtime.
Resolution:
Error of the Severity level 16 are generated by the user and are corrigible by the user. The statement can not be run this way. You can not use a GROUP BY or HAVING clause or a subquery in the recursive part of a common table expression.
Versions:
This error message was introduced with SQL Server 2005.
Example(s):
IF OBJECT_ID(‘dbo.t’) IS NOT NULL
DROP TABLE dbo.t
GO
CREATE TABLE dbo.t
(
id INT,
reportToID INT NULL,
salary int
);
GO
INSERT INTO dbo.t
SELECT 1, NULL, 1000 UNION ALL
SELECT 2, 1, 100 UNION ALL
SELECT 3, 1, 100 UNION ALL
SELECT 4, 2, 100;
GO
WITH MyCTE (id, salary, reportToID, Level)
AS
(
SELECT
t1.ID, t1.reportToID, t1.salary, 0 AS Level
FROM
dbo.t AS t1
WHERE
reportToID IS NULL
UNION ALL
SELECT
t1.ID, SUM(t1.salary), MIN(t1.reportToID), Level
FROM
dbo.t AS t1
JOIN
MyCTE AS t2 ON t1.reportToID = t2.ID
GROUP BY
t1.ID, Level
)
SELECT
*
FROM
MyCTE;
GO
Remarks:
In the above example we try to use a GROUP BY clause in the recursive part of a common table expression. This raises the error.



No comments yet... Be the first to leave a reply!