-1

列の 1 つが一意であるテーブルからいくつかの列を選択しようとしています。select ステートメントは次のようになります。

select a, distinct b, c, d  
from mytable

テーブルは次のようになります。

| a | b | c | d | e |...  
|---|---|---|---|---|   
| 1 | 2 | 3 | 4 | 5  
| 1 | 2 | 3 | 4 | 6  
| 2 | 5 | 7 | 1 | 9  
| 7 | 3 | 8 | 6 | 4  
| 7 | 3 | 8 | 6 | 7  

したがって、クエリは次のようなものを返す必要があります。

| a | b | c | d |  
|---|---|---|---|  
| 1 | 2 | 3 | 4  
| 2 | 5 | 7 | 1  
| 7 | 3 | 8 | 6  

b が重複しているすべての行を削除したいだけです。

編集: b 値が重複している場合に、どの行を選択したいかについて混乱があるようです。a、c、および d が同じである必要があるため (ただし、同じであるとは限りません) 、私は気にしません。

4

6 に答える 6

0

私はあなたがDISTINCTtryでほぼそこにいると思います:

SELECT DISTINCT a, b, c, d
FROM myTable
于 2013-09-11T15:29:16.400 に答える
0

DISTINCT単一の列を配置することはできません。の直後に置く必要がありますSELECT

SELECT DISTINCT a, b, c, d
FROM mytable

サンプル テーブルに必要な結果が返されます。ただし、単一の列からのみ重複を削除する必要がある場合 (これは不可能です)、おそらく何かを誤解しています。より多くの説明とサンプルを提供してください。正しい方向に導くよう努めます。

于 2013-09-11T15:29:18.807 に答える
0

各 b 値に対して行を選択する方法については説明していませんが、これはそれぞれに対して 1 行を選択します。

Select
    a,
    b,
    c,
    d,
    e
From (
    Select
        a,
        b,
        c,
        d,
        e,
        row_number() over (partition by b order by b) rn
    From
        mytable
    ) x
Where
    x.rn = 1
于 2013-09-11T15:25:48.497 に答える
0

、、、およびに対して取得する値が気にならない場合は、それらがそのキーに適切である限り、次のようにグループ化できます。BCDEA

 SELECT A, MIN(B), MIN(C), MIN(D), MIN(E)
 FROM MyTable
 GROUP BY A

MAX()同じように有効であることに注意してください。一部の RDBMS はFIRST()、(特定の母集団から) どの値を取得するかを気にしないまさにこれらの状況に対して、集計または同様のものをサポートします。

于 2013-09-11T15:32:35.787 に答える
0

eこれはあなたが探しているものを返しますが、列からどの値が返されるかについて決定論がないため、あなたの例には欠陥があると思います.

Create Table A1 (a int, b int, c int, d int, e int)

INSERT INTO A1 (a,b,c,d,e) VALUES (1,2,3,4,5)
INSERT INTO A1 (a,b,c,d,e) VALUES (1,2,3,4,6)
INSERT INTO A1 (a,b,c,d,e) VALUES (2,5,7,1,9)
INSERT INTO A1 (a,b,c,d,e) VALUES (7,3,8,6,4)
INSERT INTO A1 (a,b,c,d,e) VALUES (7,3,8,6,7)

SELECT * FROM A1

SELECT  a,b,c,d
FROM
(
    SELECT ROW_NUMBER() OVER (PARTITION BY b ORDER BY a) RowNum ,* 
    FROM A1 
) As InnerQuery WHERE RowNum = 1
于 2013-09-11T15:33:16.147 に答える