-1

IDを使用して個別の値のレコードを取得したいのですが、テーブルは次のようになります::

ID     Name
1      Soap
2      eridu
3      Soap
4      rewfig
5      Soap

今私は結果が欲しい:

ID  Name
1   Soap
2   eridu
3   rewfig

私は次のように使用します:[テーブル名はtblRecordです

select Distinct(Name) ,ID
  from tblRecord
 where Name in (select Distinct(Name) 
                  from tblRecord
               )
4

2 に答える 2

3
SELECT ID, Name
FROM 
(
    SELECT ID, Name,
            ROW_NUMBER() OVER  (PARTITION BY NAME ORDER BY ID ASC) rn
    FROM tableName
) s
WHERE rn = 1
ORDER BY ID

しかし、他の列がない場合の最も簡単な解決策は

SELECT MIN(ID) ID, Name
FROM tableName
GROUP BY Name
于 2012-11-08T08:25:00.697 に答える
2

これを試して:

;WITH CTE AS
(
  SELECT Id, Name, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Id) row_num
  FROM Table
)
SELECT Id, Name
FROM CTE
WHERE row_num = 1;

これはあなたに与えるでしょう:

ID  NAME
2   eridu
4   rewfig
1   Soap

質問で行ったのと同じように正確な出力を取得したい場合。結果の新しいランキング番号を生成する必要があります。DENSE_RANK()次のような関数を使用してみてください。

;WITH CTE AS
(
  SELECT Id, Name, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Name) row_num
  FROM Table1
)
SELECT DENSE_RANK() OVER(ORDER BY Name) ID, Name
FROM CTE
WHERE row_num = 1;

これにより、正確に望ましい結果セットが得られます。

ID  NAME
1   eridu
2   rewfig
3   Soap

SQLフィドルデモ

于 2012-11-08T08:24:23.410 に答える