2016-10-05 9 views
-1

Row_Number Over Partition by列に基づいてRow_Number Over Partition by列の各データセットを選択するにはどうすればよいですか?Row_Number Over Partition by列の各データセットをRow_Number Over Partition by列に基づいて選択するにはどうすればよいですか?

下図ください

+-----------+-------------+-------------------+------------+----------+ 
| packageid | packagename | package max units | references | row_Numb | 
+-----------+-------------+-------------------+------------+----------+ 
|  44 | Basic  | 10    | 103  | 1  | 
|  45 | Basic  | 10    | 103  | 2  | 
|  42 | Cola  | 10    | 102  | 1  | 
|  43 | Cola  | 10    | 102  | 2  | 
|  46 | Cola  | 10    | 102  | 3  | 
|  2  | Home  | 11    | 101  | 1  | 
|  11 | Home  | 11    | 101  | 2  | 
|  21 | Home  | 11    | 101  | 3  | 
|  1  | Spicy  | 11    | 104  | 1  | 
|  3  | Spicy  | 11    | 104  | 2  | 
|  41 | Spicy  | 11    | 104  | 3  | 
+-----------+-------------+-------------------+------------+----------+ 

私はROW_NUM列に基づいて、各グループ内の各データセットを選択します。

すべての試みが歓迎されます。

+1

、あなたがすることができますしてくださいいくつかの説明と望ましい結果を追加しますか? – HoneyBadger

+1

あなたの結果を投稿 – Madhivanan

答えて

1

すでにROW_NUMBER()の列があるように聞こえますが、私はそれがあなたが求めていると信じています。各PACKAGENAMEの最初のレコード用:

SELECT s.* FROM (
    SELECT t.*, 
      ROW_NUMBER() OVER(PARTITION BY t.packagename ORDER BY t.packageid) as rnk 
    FROM YourTable t) s 
WHERE s.rnk = 1 

これらはすべて内部クエリのみを使用します。

0

各グループから単一レコードをフェッチする場合は、cteバージョンです。

;with cte_1 
    as(
    SELECT *, 
      ROW_NUMBER() OVER(PARTITION BY [packagename],[package max units], [references] ORDER BY [packageid]) as row_Numb 
    FROM YourTable) 
    SELECT [packageid],[packagename],[package max units],[reference] 
    FROM cte_1 
    WHERE row_Numb = 1 
0

あなたはROW_NUMBER()によって発注とタイでTOP 1を使用することができます。

SELECT TOP 1 WITH TIES * 
FROM YourTable 
ORDER BY ROW_NUMBER() OVER (PARTITION BY packagename ORDER BY packageid) 

出力:私はあなたが求めているものは考えを持っていないしまし

packageid packagename package max units references 
44   Basic  10     103 
42   Cola  10     102 
2   Home  11     101 
1   Spicy  11     104 
関連する問題