2017-01-19 5 views
1

重複しているSQLテーブルから一意の行を選択しようとしています。私はOrderId列を持っており、これは各行に対して一意である必要があります。だから私は一意のorderIdを持つすべての列(30)を選択しようとしている。私はこのクエリを試みたが、すべての行を返す。 groupByと同じSql Server 2008テーブルから一意の行を選択

"SELECT DISTINCT (OrderId)AS[OrderId], * from tableName" 
+1

、それはすべての行を返すなら、それは各行について別の何かがあることを意味する。 –

+2

'OrderId'は、各行の一意である場合は、その後のw 'OrderId'自体のためにすべての行を取得できません。いくつかのサンプルデータと結果を表示する。 –

+1

select count(*)、countid(orderid)> 1を持つorderidグループによるorderidグループ –

答えて

0

SpMあなたの質問はかなり曖昧です。重複しているテーブルから一意の行を取得する必要があります。重複する列は何ですか?一意の値を取得する場所で重複する列を定義する必要があります。

これまで説明したように、OrderID列は各行で一意です。あなたはあなたのテーブルから別々の一意の行を選択しているので、もちろんすべての行が戻ってくるでしょう。あなたがする必要がどのような

は「あなたの望ましい結果を得るためにテーブル名から明確なDuplicateColumnNameを選択するためにあなたのSQLを変更している

1

一つの解決策が考えられます。OrderIdでで

数行とこれらの場所RN = 1を取得します

WITH un AS 
(
    SELECT OrderId, Field1, Field2, Field3, 
      ROW_NUMBER() OVER (PARTITION BY OrderId ORDER BY OrderId) AS RN 
    FROM TABLE 
) 
SELECT OrderId, Field1, Field2, Field3 
FROM un 
WHERE RN = 1 
ORDER BY OrderId; 
-1
select t.* from 
(
    select orderid,row_number() over (partition by orderid order by orderid) r from tablename 
) t 
where r=1 
関連する問題