2012-06-25 53 views
0
Houston Apartment   Order 1 
Houston Apartment   Order 5 
Houston TownHouse Order 3 
Houston TownHouse Order 4 
Austin Condo 
Dallas MultiFamily Order 2 

所有,SQL查詢(窗口函數)協助

我設置類似上面的一個結果。 使用熟悉的Customer - > Orders架構作爲示例, 前兩列(例如Houston,Apartment)來自Customer Table上的category1和category2字段。 第三列來自訂單表,並將表示表的主鍵。此列中的值故意無序列出(1 ... 5 ... 3),以表明我無法保證值的順序。

我想要的是有增加了一個等級或ROW_NUMBER(或計算?)一列編號爲1類和2類的每個組合:

1 Houston Apartment Order 1 
1 Houston Apartment Order 5 
2 Houston TownHouse   Order 3 
2 Houston TownHouse Order 4 
3 Austin Condo 
4 Dallas MultiFamily Order 2 

所以,休斯敦Aparment是1,Houston- TownHouse是2等...

我想避免任何子/嵌套查詢,如果可能的話。

請注意: 示例中的值或只是示例數據。真正的數據並不基於客戶/訂單,所以我恭敬地和謙恭地請求您不要因爲將城市和公寓類型作爲類別等(我將這些情況放在單獨的域名錶中)或者建議更改架構

任何人都可以幫忙嗎?!

史蒂夫

+0

您正在使用哪種rdbms? @andomar說得很好。 –

回答

1

根據您顯示的結果,我認爲你想要:

select dense_rank() over (order by Category1, Category2) as rankorder, * 
from Customers c join 
    Orders o 
    on o.CustomerID = c.CustomerID 

您似乎只是基於前兩個類別添加索引,並且從不重新開始(該分區用於重新開始計算)。你有沒有差距的聯繫(1,1,2 ...)。對於這種情況,你需要dense_rank()。如果你與間隙有關係(1,1,3 ...),你可以使用rank()。如果你只是想要排序(1,2,3),你可以使用row_number()。

+0

非常感謝。我今晚會嘗試,但只是知道另一個嘗試的選擇是令人興奮的。我會更新選擇這個作爲答案,如果它的工作。再次感謝! –

+0

Dense_Rank()是我的沮喪和祈禱的答案。我仍然需要使用分區依據來滿足我的特定要求,但這是允許我解決問題的答案。我不得不在Matrix SSRS報告中使用這個,這讓我能夠展示一個漂亮,乾淨的表格,並刪除空行。 (這些空行是由Rank()創建的索引中的空白引起的。) –

0

如果你的數據庫支持窗口的功能,你可以使用row_number()

select row_number() over (partition by Category1, Category2 order by CustomerID) 
from Customers c 
join Orders o 
on  o.CustomerID = c.CustomerID 
0

像這樣的東西應該做的:

create table Data 
(
    city varchar(50), 
    propertyType varchar(50), 
    anOrder int 
) 
insert into Data select 'Houston', 'Apartment', 1 
insert into Data select 'Houston', 'Apartment', 5 
insert into Data select 'Houston', 'TownHouse', 3 
insert into Data select 'Houston', 'TownHouse', 4 
insert into Data select 'Austin', 'Condo', 1 
insert into Data select 'Dallas', 'MultiFamily', 2 

select city, propertyType, RANK() OVER 
    (PARTITION BY Data.city ORDER BY Data.city,Data.propertyType DESC) AS Rank 
from Data 
group by city, propertyType