Sql server 2008 为什么这个sql RANK OVER()命令给我所有的秩1
在下面的查询中,我尝试按最高的computedWorstDerogLevel和最低的RecentDerogMonths对行进行排序,但它将所有行都排序为1Sql server 2008 为什么这个sql RANK OVER()命令给我所有的秩1,sql-server-2008,Sql Server 2008,在下面的查询中,我尝试按最高的computedWorstDerogLevel和最低的RecentDerogMonths对行进行排序,但它将所有行都排序为1 SELECT strTransID, strRateCode as PreviousHighRateCode, strRateStatusCode as TradelineRateCode, dateReported, d
SELECT
strTransID,
strRateCode as PreviousHighRateCode,
strRateStatusCode as TradelineRateCode,
dateReported,
datePreviousHigh,
CASE
WHEN
strRateStatusCode IN ('2', '3', '4', '5', '7', '8', '9', 'F', 'G', 'H', 'M', 'Z', '#', '$')
AND
(
strRateStatusCode IN ('F', 'G', 'H', 'M', 'Z', '#', '$')
OR strRateStatusCode >= strRateCode
)
THEN
strRateStatusCode
ELSE
strRateCode
END AS WorstDerogLevel
,
DateDiff(month,
CASE
WHEN
(
dateReported >= datePreviousHigh
OR datePreviousHigh is null
)
AND strRateStatusCode IN ('2', '3', '4', '5', '7', '8', '9', 'F', 'G', 'H', 'M', 'Z', '#', '$')
AND
(
strRateStatusCode IN ('F', 'G', 'H', 'M', 'Z', '#', '$')
OR strRateStatusCode >= strRateCode
)
THEN
dateReported
ELSE
datePreviousHigh
END,
dateTransDate) as RecentDerogMonths
,
RANK() OVER
(
PARTITION BY
DateDiff(month,
CASE
WHEN
(
dateReported >= datePreviousHigh
OR datePreviousHigh is null
)
AND strRateStatusCode IN ('2', '3', '4', '5', '7', '8', '9', 'F', 'G', 'H', 'M', 'Z', '#', '$')
AND
(
strRateStatusCode IN ('F', 'G', 'H', 'M', 'Z', '#', '$')
OR strRateStatusCode >= CstrRateCode
)
THEN
dateReported
ELSE
datePreviousHigh
END,
dateTransDate)
ORDER BY
CASE
WHEN
strRateStatusCode IN ('2', '3', '4', '5', '7', '8', '9', 'F', 'G', 'H', 'M', 'Z', '#', '$')
AND
(
strRateStatusCode IN ('F', 'G', 'H', 'M', 'Z', '#', '$')
OR strRateStatusCode >= strRateCode
)
THEN
strRateStatusCode
ELSE
strRateCode
END desc,
DateDiff(month,
CASE
WHEN
(
dateReported >= datePreviousHigh
OR datePreviousHigh is null
)
AND strRateStatusCode IN ('2', '3', '4', '5', '7', '8', '9', 'F', 'G', 'H', 'M', 'Z', '#', '$')
AND
(
strRateStatusCode IN ('F', 'G', 'H', 'M', 'Z', '#', '$')
OR strRateStatusCode >= strRateCode
)
THEN
dateReported
ELSE
datePreviousHigh
END,
dateTransDate) asc
) AS Rank
FROM
[Customers]
WHERE strTransID = '279579407'
这是我的结果集
只需添加两列PartitionField和OrderField,并在上面的列组中添加表达式,即可调试查询 有两种情况下,每行的秩=1 每行属于不同的分区,因此分区大小为1。 分区中的所有行都有相同的值,都是秩1。
好的,已经有了,partition by字段与RecentDerogMonths相同,order by是WorstDerogLevel desc RecentDerogMonths asc,在上面的例子中,我希望19个月排名1,看起来你有第二个案例。分区中的所有行都具有相同的WorstDerogLevelbtw如果您是按RecentDerogMonths分区的,那么就没有按RecentDerogMonths排序的点,因为分区中的所有元素都具有相同的值。如果我澄清我正在尝试做什么,您可以帮我。我只想要最近几个月最低的,最糟糕的;我想这是最好的办法。我明白你的意思。把分区拿出来给我我想要的。