0

私は以下の表を持っています

Id          Stack
------------------
1             a
1             b
2             c
2             d

以下の表の結果を取得したい。

Id          Stack
------------------
1             a
2             c

DISTINCTを使用していますが、機能しません。どうすればよいですか?group byを使用した解決策はありますか?

4

4 に答える 4

2
CREATE table sampletb(id int, stack varchar(10));

INSERT into sampletb values(1,'a');
INSERT into sampletb values(1,'b');
INSERT into sampletb values(2,'c');
INSERT into sampletb values(2,'d');

SELECT * FROM sampletb;

id          stack
----------- ----------
1           a
1           b
2           c
2           d


SELECT id,
       stack,
       row_number() over (partition by id order by stack) as row_number
from   sampletb;

このクエリにより、次のような結果が得られます。

id          stack      row_number
----------- ---------- --------------------
1           a          1
1           b          2
2           c          1
2           d          2

上記のクエリをサブクエリとして作成し、列を取得すると、 row_number=1必要な出力が得られます。

select id,stack from 
       (
       SELECT id,
              stack,
              row_number() over (partition by id order by stack) as row_number 
       FROM   sampletb) x
where  x.row_number=1;

id          stack
----------- ----------
1           a
2           c
于 2012-09-13T08:52:24.813 に答える
1
select id,stack from (
select id , stack  , row_number() over (partition by id order by stack) as rn
) k where rn=1
于 2012-09-13T08:22:45.300 に答える
1

適用する必要のある正確なロジックはわかりませんが、これにより、投稿した結果が返されます。

SELECT  ID, MIN(Stack) AS Stack
FROM    T
GROUP BY ID

ROW_NUMBERDBMSで許可されている場合は、関数でより高度なロジックを使用できます(質問でタグ付けされていないもの)

SELECT  ID, Stack
FROM    (   SELECT  ID,
                    Stack,
                    ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Stack) AS RowNumber
            FROM    T
        ) t
WHERE   RowNumber = 1
于 2012-09-13T08:22:54.983 に答える
0

これは役立つはずです

select Id, min(Stack) from <TABLE_NAME>
group by Id
于 2012-09-13T08:27:50.417 に答える