Sql 与CTE一起使用时,行号已断开
这是我的查询CTE内部的SQL工作正常,我只想得到每个城市名称的前20行:Sql 与CTE一起使用时,行号已断开,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,这是我的查询CTE内部的SQL工作正常,我只想得到每个城市名称的前20行: WITH taniCte AS ( SELECT sl.Adi AS [CityName], mt.ICD10Kodu AS [Tanı], count(mt.ICD10Kodu) AS sayi, RowNum = ROW_NUMBER() OVER ( ORDER BY sl.Adi ) FROM Muay
WITH taniCte
AS (
SELECT sl.Adi AS [CityName],
mt.ICD10Kodu AS [Tanı],
count(mt.ICD10Kodu) AS sayi,
RowNum = ROW_NUMBER() OVER (
ORDER BY sl.Adi
)
FROM Muayene.Muayene mm WITH (NOLOCK)
INNER JOIN Muayene.Tani mt WITH (NOLOCK) ON mm.ID = mt.MuayeneId
INNER JOIN Ortak.Kurum ok WITH (NOLOCK) ON mm.CreatedKurumKodu = ok.KurumKodu
INNER JOIN Skrs.Il sl WITH (NOLOCK) ON ok.IlKodu = sl.Kodu
GROUP BY sl.Adi,
mt.ICD10Kodu
) --order by [CityName], sayi desc // commentewhen its moved inside cte
SELECT [CityName],
[Tanı],
sayi,
RowNum
FROM taniCte
WHERE RowNum <= 20
ORDER BY [CityName],
sayi DESC
尽管主查询工作正常,但上面的查询返回错误的行
我在互联网上找不到任何解决方案如果您需要每个城市20行,那么您在cte中的行数OVER子句应该是
with taniCte as
(
select sl.Adi as [CityName]
, mt.ICD10Kodu as [Tanı]
, count(mt.ICD10Kodu) as sayi
, RowNum = ROW_NUMBER()OVER(partition By sl.Adi order by count(mt.ICD10Kodu)) -- this change in over clause
from Muayene.Muayene mm with(nolock)
join Muayene.Tani mt with(nolock) on mm.ID = mt.MuayeneId
join Ortak.Kurum ok with(nolock) on mm.CreatedKurumKodu = ok.KurumKodu
join Skrs.Il sl with(nolock) on ok.IlKodu = sl.Kodu
group by sl.Adi, mt.ICD10Kodu
--order by [CityName], sayi desc // commentewhen its moved inside cte
)
select [CityName], [Tanı],sayi, RowNum
from taniCte
where RowNum <= 20
order by [CityName], sayi desc
这个查询看起来不错。你能提供样品数据和预期结果吗?有什么问题吗?RowNum的目的是什么?为什么要使用nolock?你知道这意味着什么,对吧?老兄,上帝保佑你和你的家人,保佑你所爱的一切。谢谢