Sql 排名显示所有用户罚款。但是如何显示一个用户的排名?
我有一个SQL查询:Sql 排名显示所有用户罚款。但是如何显示一个用户的排名?,sql,sql-server,Sql,Sql Server,我有一个SQL查询: SELECT DENSE_RANK() OVER (ORDER BY s.rows DESC) AS Ranks, Territory, TM_Name, COALESCE(g.rows, 0) AS RXCount, COALESCE(s.rows, 0) AS DelCounts, COALESCE(nd.rows, 0) AS NotDeliveredCount, COALESCE(trgt.rows, 0) AS
SELECT
DENSE_RANK() OVER (ORDER BY s.rows DESC) AS Ranks,
Territory, TM_Name,
COALESCE(g.rows, 0) AS RXCount,
COALESCE(s.rows, 0) AS DelCounts,
COALESCE(nd.rows, 0) AS NotDeliveredCount,
COALESCE(trgt.rows, 0) AS Target,
e.TM_Emp_Id
FROM
tblEmployee e
LEFT JOIN
(SELECT EmpCode, SUM(RxGenerate) AS rows
FROM tbl_RX
GROUP BY EmpCode) g ON g.EmpCode = e.TM_Emp_Id
LEFT JOIN
(SELECT EmpCode, SUM(MedToPCount) AS rows
FROM tbl_MedicinToPatient
WHERE Status = 'Delivered'
GROUP BY EmpCode) s ON s.EmpCode = e.TM_Emp_Id
LEFT JOIN
(SELECT EmpCode, COUNT(*) AS rows
FROM tbl_MedicinToPatient
WHERE Status != 'Delivered'
GROUP BY EmpCode) nd ON nd.EmpCode = e.TM_Emp_Id
LEFT JOIN
(SELECT
EmpCode, CurrentTarget AS rows,
CreatedDate, RankOrder, T.PreviousTarget
FROM
(SELECT
EmpCode, CurrentTarget, CreatedDate,PreviousTarget,
RANK() OVER (PARTITION BY EmpCode ORDER BY CreatedDate DESC) RankOrder
FROM
tbl_Target) T
WHERE
RankOrder = 1) trgt ON trgt.EmpCode = e.TM_Emp_Id
它返回所需的输出。也就是说,对于每个用户,它都能完美地计算排名。但当我在查询末尾添加where条件时,例如:
e.TM_Emp_Id = 101
它显示一个1的等级。对于每个用户,我都会得到相同的结果(即排名1)。
但我想显示原始排名。我如何做到这一点?提前谢谢 对此,您至少有3个简单的选项
select *
from (current code)
where TM_Emp_ID = 101
WITH MY_QUERY AS
(current code)
SELECT *
FROM MY_QUERY
WHERE TM_EMP_ID = 101
您必须对所有用户进行排名,才能了解特定用户的排名。因此,请从查询中选择:
select *
from ( your query here ) q
where tm_emp_id = 101;
将您的查询包装起来
select*from(您的代码)t其中t.TM_Emp_Id=101
点击“谢谢你的伴侣”@JamieD77一定要给我答案,让我接受。