T-SQL DENSE_RANK()没有返回我期望的内容

时间:2017-06-08 14:13:47

标签: sql-server tsql

我无法获取DENSE_RANK()(或类似)以从select查询中获取我想要的值。我已经尝试过RANK()和ROW_NUMBER(),我已经更改了PARTITION和ORDER-BY字段,但没有运气。 查询遵循......

SELECT         100 * DENSE_RANK() OVER (PARTITION BY UID_CUSTOMER, INT_GROUP_BY ORDER BY UID_CUSTOMER) AS  aINT_GROUP_BY,                
                 5 * ROW_NUMBER() OVER (PARTITION BY UID_DIVISION, UID_CUSTOMER,INT_GROUP_BY ORDER BY UID_DIVISION, UID_CUSTOMER, INT_GROUP_BY, INT_SORT_ORDER) AS  aINT_SORT_ORDER,                
               UID_DIVISION, UID_CUSTOMER, UID_VEHICLE, INT_GROUP_BY, TXT_GROUP_NAME
FROM           tVEHICLES TV
ORDER BY       UID_DIVISION, UID_CUSTOMER, INT_GROUP_BY, INT_SORT_ORDER;

我使用UID_CUSTOMER编号的偏移显示结果,因此您可以看到列出了三个不同的客户(更改了列标题以缩小列表显示)。

aGROUP_BY  aSORT_ORDER  UID_DIVISION  UID_CUSTOMER  GROUP_BY  TXT_GROUP_NAME
100        5            5             82            100       Group-100
100        10           5             82            100       Group-100
100        15           5             82            100       Group-100
100        20           5             82            100       Group-100
100        25           5             82            100       Group-100
100        5            5             86            100       Group-100
100        10           5             86            100       Group-100
100        15           5             86            100       Group-100
100        20           5             86            100       Group-100
100        25           5             86            100       Group-100
100        30           5             86            100       Group-100
100        5            5             88            100       North
100        10           5             88            100       North
100        15           5             88            100       North
100        5            5             88            200       South
100        10           5             88            200       South
100        15           5             88            200       South

显示的两列是从OVER构造派生的,我希望aGROUP_BY值为200而不是100.字段数据的来源位于剩下的第3至6列。

非常欢迎你的意见和建议......约翰

2 个答案:

答案 0 :(得分:1)

这是你的代码:

DENSE_RANK() OVER (PARTITION BY UID_CUSTOMER, INT_GROUP_BY ORDER BY UID_CUSTOMER) AS  aINT_GROUP_BY,

您已将排名分为两个字段:customer和' INT_GROUP_BY' - 所以数据集中的第13行到第17行实际上包含两个分区。第一个是88,100,第二个是88,200。每组中的排名从1开始,这就是你在所有六行中看到100的原因。

将您的代码修改为:

DENSE_RANK() OVER (PARTITION BY UID_CUSTOMER ORDER BY UID_CUSTOMER, INT_GROUP_BY) AS  aINT_GROUP_BY,

如果INT_GROUP_BY在order子句而不是partition子句中,您应该看到预期的行为。

答案 1 :(得分:0)

尝试这样的事情

ret