Sql server ITH)@user1805523否没有使用行号()。但是你可以在没有rownumber的情况下,我会用另一个没有ROW_NUMBER()@user1805523的解决方案更新我的答案是的,你这么说了,但是你能解释一下原因吗?我得到了这个错误:Msg 815
Sql server ITH)@user1805523否没有使用行号()。但是你可以在没有rownumber的情况下,我会用另一个没有ROW_NUMBER()@user1805523的解决方案更新我的答案是的,你这么说了,但是你能解释一下原因吗?我得到了这个错误:Msg 815,sql-server,row-number,Sql Server,Row Number,ITH)@user1805523否没有使用行号()。但是你可以在没有rownumber的情况下,我会用另一个没有ROW_NUMBER()@user1805523的解决方案更新我的答案是的,你这么说了,但是你能解释一下原因吗?我得到了这个错误:Msg 8155,16级,状态2,第1行Aucun nom de colonne n'aétéspécifi pour la colonne 3 de'CTE'。@user1805523它说有一列您在CTE中选择而没有名称,在CTE中选择的每一列都必须命名。
ITH)@user1805523否没有使用
行号()。但是你可以在没有rownumber的情况下,我会用另一个没有ROW_NUMBER()
@user1805523的解决方案更新我的答案是的,你这么说了,但是你能解释一下原因吗?我得到了这个错误:Msg 8155,16级,状态2,第1行Aucun nom de colonne n'aétéspécifi pour la colonne 3 de'CTE'。@user1805523它说有一列您在CTE
中选择而没有名称,在CTE中选择的每一列都必须命名。请发布您尝试的完整查询。我想问的是,是否有一种解决方案允许在where子句中直接使用别名“classement”(即不使用WITH)@user1805523不,没有使用行号()。但是你可以在没有rownumber的情况下,我会用另一种没有ROW_NUMBER()
@user1805523的解决方案更新我的答案是的,你说过了,但是你能解释一下原因吗?
select ROW_NUMBER() OVER ( PARTITION BY codtiers ORDER BY case when isnull(cumulapport, 0) > isnull(cumulretrait, 0) then cumulapport
else cumulretrait
end DESC ) AS classement,
codTiers
from dbo.TiersComptesLocal
group by codTiers
classement | codTiers
-------------------------
1 | 1XXXXX
2 | 1XXXXX
1 | 1YYXXX
2 | 1YYXXX
3 | 1YYXXX
1 | 1XXXYY
classement | codTiers
-------------------------
1 | 1XXXXX
1 | 1YYXXX
1 | 1XXXYY
select ROW_NUMBER() OVER ( PARTITION BY tcl_codtiers ORDER BY case when isnull(cumulapport, 0) > isnull(cumulretrait, 0) then cumulapport
else cumulretrait
end DESC ) AS classement,
TCL_CodTiers,
'le montant max des ' + Senscumul + ' ( '
+ convert(varchar(50), '') + ' € ) du tiers titulaire '
+ TCL_CodTiers + ' ( ' + ''
+ ' ) est supérieur au seuil fixé dans l''alerte : '
+ '75000'
from dbo.CLI_TCL_TiersComptesLocal
INNER JOIN dbo.CLI_GCO_GeneriquesComptes ON TCL_CodTiers = GCO_CodTiersPrincipal
AND TCL_NumLien IN ( 0, 1 )
inner join ( select TCL_CodTiers CodTiers,
sum(case when ESO_MntValoRetenuEnEuros > 0
then ESO_MntValoRetenuEnEuros
else 0
end) cumulapport,
sum(case when ESO_MntValoRetenuEnEuros < 0
then abs(ESO_MntValoRetenuEnEuros)
else 0
end) cumulretrait,
case when isnull( sum(case when ESO_MntValoRetenuEnEuros > 0
then ESO_MntValoRetenuEnEuros
else 0
end), 0) > isnull( sum(case when ESO_MntValoRetenuEnEuros < 0
then abs(ESO_MntValoRetenuEnEuros)
else 0
end), 0)
then 'Apports'
else 'Retraits'
end as Senscumul
from CRO_ESO_EntreeSortie
inner join CLI_TCL_TiersComptesLocal on TCL_CodCompte = ESO_CodCompte
and TCL_NumLien in ( 0, 1 )
group by TCL_CodTiers
having sum(case when ESO_MntValoRetenuEnEuros > 0
then ESO_MntValoRetenuEnEuros
else 0
end) > 75000
or sum(case when ESO_MntValoRetenuEnEuros < 0
then abs(ESO_MntValoRetenuEnEuros)
else 0
end) > 75000
) surveillance on GCO_CodTiersPrincipal = CodTiers
WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY codtiers
ORDER BY CASE
WHEN ISNULL(cumulapport, 0) >
ISNULL(cumulretrait, 0) THEN cumulapport
ELSE cumulretrait
END DESC) AS classement,
codTiers
FROM dbo.TiersComptesLocal
)
SELECT *
FROM CTE
WHERE classement = 1;
SELECT
codtiers,
MAX(CASE
WHEN ISNULL(cumulapport, 0) >
ISNULL(cumulretrait, 0) THEN cumulapport
ELSE cumulretrait
END DESC) AS classement
FROM dbo.TiersComptesLocal
GROUP BY codtiers;
SELECT *
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY codtiers
ORDER BY CASE WHEN ISNULL(cumulapport, 0)>ISNULL(cumulretrait, 0)
THEN cumulapport ELSE cumulretrait END DESC) AS classement,
codTiers
FROM dbo.TiersComptesLocal
GROUP BY codTiers) A
WHERE classement = 1
SELECT classement, codtiers
FROM
(
SELECT
classement = ROW_NUMBER() OVER (PARTITION BY codtiers
ORDER BY CASE WHEN ISNULL(cumulapport, 0) > ISNULL(cumulretrait, 0)
THEN cumulapport ELSE cumulretrait END DESC),
codTiers
FROM dbo.TiersComptesLocal
) AS x
WHERE classement = 1;