我无法获取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列。
非常欢迎你的意见和建议......约翰
答案 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