um amigo me passou uma consulta desse jeito funciona no mssql
WITH CPU_AD (CODCOLIGADA, IDPRJ, IDCMP, IDCMPFILHA, IDISM, CODCMP, DESCCMP, COEF, VALORUNIT, VALORTOTAL, VALORFLOAT, VALORUNIT2, GRUPODNER2, NIVEL)
AS
(
–Anchor Member ,
SELECT MRECCMP.CODCOLIGADA, MRECCMP.IDPRJ, MRECCMP.IDCMP, MRECCMP.IDCMPFILHA, MRECCMP.IDISM, MCMP.CODCMP, MCMP.DESCCMP,
(MRECCMP.QUANTIDADE/10000) AS COEF, MRECCMP.VALORUNIT, MRECCMP.VALORTOTAL, MPARAMETRO.VALORFLOAT,
(MRECCMP.VALORTOTAL/MPARAMETRO.VALORFLOAT) AS VALORUNIT2, MGIS.GRUPODNER, 0 AS NIVEL
FROM MCMP
INNER JOIN MRECCMP ON (
MRECCMP.CODCOLIGADA = MCMP.CODCOLIGADA
AND MRECCMP.IDPRJ = MCMP.IDPRJ
AND MRECCMP.IDCMP = MCMP.IDCMP)
INNER JOIN MPARAMETRO ON (
MPARAMETRO.CODCOLIGADA = MCMP.CODCOLIGADA
AND MPARAMETRO.IDPRJ = MCMP.IDPRJ )
LEFT JOIN MISM ON (
MRECCMP.CODCOLIGADA = MISM.CODCOLIGADA
AND MRECCMP.IDPRJ = MISM.IDPRJ
AND MRECCMP.IDISM = MISM.IDISM)
LEFT JOIN MGIS ON (
MGIS.CODCOLIGADA = MISM.CODCOLIGADA
AND MGIS.IDPRJ = MISM.IDPRJ
AND MGIS.IDGIS = MISM.IDGIS)
WHERE
MCMP.CODCOLIGADA = 1
AND MCMP.IDPRJ = 102
AND MCMP.IDCMP = 252914
AND MPARAMETRO.PARAMETRO = 'FATORLEISOCIAL1'
UNION ALL
--Recursive Member
SELECT MRECCMP.CODCOLIGADA, MRECCMP.IDPRJ, MRECCMP.IDCMP, MRECCMP.IDCMPFILHA, MRECCMP.IDISM, MCMP.CODCMP, MCMP.DESCCMP,
(MRECCMP.QUANTIDADE/10000) AS COEF, MRECCMP.VALORUNIT, MRECCMP.VALORTOTAL, MPARAMETRO.VALORFLOAT,
(MRECCMP.VALORTOTAL/MPARAMETRO.VALORFLOAT) AS VALORUNIT2, GRUPODNER, NIVEL + 1
FROM MCMP
INNER JOIN MRECCMP ON (
MRECCMP.CODCOLIGADA = MCMP.CODCOLIGADA
AND MRECCMP.IDPRJ = MCMP.IDPRJ
AND MRECCMP.IDCMP = MCMP.IDCMP)
INNER JOIN MPARAMETRO ON (
MPARAMETRO.CODCOLIGADA = MCMP.CODCOLIGADA
AND MPARAMETRO.IDPRJ = MCMP.IDPRJ )
INNER JOIN CPU_AD AS D ON (
D.CODCOLIGADA = MCMP.CODCOLIGADA
AND D.IDPRJ = MCMP.IDPRJ
AND D.IDCMPFILHA = MCMP.IDCMP)
WHERE
MCMP.CODCOLIGADA = 1
AND MCMP.IDPRJ = 102
AND MPARAMETRO.PARAMETRO = 'FATORLEISOCIAL1'
)
SELECT * FROM CPU_AD AS D