2016-09-08 7 views
1

を取得するために、SQLが必要です:私はSQL Serverデータベースを使用して、このデータを持っています一番上の行

Loc  dept deptdesc 
----------------------- 
1  201  ccccc 
1  201  fffff 
1  201  uuu 
2  202  lllll 
3  203  ooo 
3  203  yyy 
3  203  mmm 
3  203  bbbb 

私がデータを取得するために、SQLクエリを支援する必要があります。

Loc  dept  deptdesc 
---------------------------- 
1   201  ccccc 
2   202  lllll 
3   203  ooo 
+5

は、それはあなたが望む結果を得ることが可能ではありませんがあると仮定。注文は矛盾しています。 SQLテーブルは*順序付けられていない集合*を表します。したがって、何かを注文することなく、結果は非決定論的です。 – Siyual

+1

あなたが取得したグループの中のどれを気にせず、任意の結果を1つだけ望むなら、それが可能です。それはあなたが探しているものですか? – Siyual

+0

これは、dept descのどれでもかまいません。トップ1は大丈夫です。 – user3761541

答えて

0

は、以下を使用しますあなたはCTEを使うことができます。

1

Row_Number()を使用して、各グループの最初のメンバーのみを使用します。

;With Cte As 
(
    Select *, Row_Number() Over (Partition By Dept Order By (Select Null)) As RN 
    From YourTable 
) 
Select Loc, Dept, DeptDesc 
From Cte 
Where RN = 1 
2

あなたのコメントには、説明がありますが、それは実際には単純なグループが機能すると仮定したものです。

SELECT Loc, dept, MIN(deptdesc) 
FROM YourTable 
GROUP BY Loc, dept 
0

てきたが、サロゲートID

 
WITH firstVal AS(
    SELECT 
     DISTINCT first_value(column4) OVER(PARTITION BY column1 ORDER BY column2) AS id 
    FROM 
    (VALUES 
     (1,201,'ccccc',100) 
     ,(1,201,'fffff',101) 
     ,(1,201,'uuu',102), 
     (2,202,'lllll',103), 
     (3,203,'ooo',104), 
     (3,203,'yyy',105), 
     (3,203,'mmm',106), 
     (3,203,'bbbb',107) 
    ) 
) 
SELECT 
    column1,column2,column3 
FROM 
    (VALUES 
     (1,201,'ccccc',100) 
     ,(1,201,'fffff',101) 
     ,(1,201,'uuu',102), 
     (2,202,'lllll',103), 
     (3,203,'ooo',104), 
     (3,203,'yyy',105), 
     (3,203,'mmm',106), 
     (3,203,'bbbb',107) 
    ) vals 
INNER JOIN firstVal ON firstVal.id = vals.column4 
関連する問題