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

全て、

上記のような結果セットがあります。おなじみのCustomer->Ordersスキーマを例として使用すると、最初の2つの列(Houston、Apartmentなど)は、Customerテーブルのcategory1フィールドとcategory2フィールドから取得されます。3番目の列は注文テーブルからのものであり、テーブルの主キーを表します。この列の値は、値の順序を保証できないことを示すために、意図的に順序が狂って(1 ... 5 ... 3)リストされています。

私が欲しいのは、カテゴリ1と2の各組み合わせに番号を付けるRankまたはRow_number(または計算?)を追加する列を作成することです。

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

つまり、Houston-Aparmentは1、Houston-TownHouseは2などです。

可能であれば、サブ/ネストされたクエリ避けたいと思います。

注意:例の値または単なるサンプルデータ。実際のデータは顧客/注文に基づいていないため、都市やアパートのタイプをカテゴリなどとして非難したり(この場合はこれらを別々のドメインテーブルに配置します)、変更を提案したりしないでください。スキーマの

誰か助けてもらえますか?!

スティーブ

4

3 に答える 3

1

あなたが示す結果に基づいて、私はあなたが望むと思います:

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

最初の2つのカテゴリのみに基づいてインデックスを追加していて、最初からやり直すことはないようです(パーティションはカウントをやり直すために使用されます)。ギャップのない関係があります(1、1、2。。。)。この場合、dense_rank()が必要です。ギャップ(1、1、3。。。)との関係がある場合は、rank()を使用します。順序(1、2、3)が必要な場合は、row_number()を使用します。

于 2012-06-25T18:58:35.110 に答える
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
于 2012-06-25T18:52:14.483 に答える
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
于 2012-06-25T18:58:27.803 に答える