1

私はこの質問sql-distinct+selectをチェックしてみましたが、私の状況に正しく合わせることができないようです。私もsqldevチームに所属していないので、データベースのすべてのインとアウトを知りません。私はここでテストDBで暗闇の中で撮影しています。これが私の現在のクエリの疑似サンプルです:

select a.name, b.col1, 
from name a, amount b
where a.identifier=b.acctid
and b.col1 != 'test'

現在クエリによって返されるものの例:

a.name | b.col1
Jeff     1
Jeff     333
Jeff     77
Jeff     1
Jeff     14
Bob      22
Bob      4
Bob      5
Bob      6

そして、クエリの結果が、ColAに基づいて一意である最初のn(私が選択した数)の結果を返すようにしたいと思います。たとえば、nが2の場合:

a.name | b.col1
Jeff     1
Jeff     333
Bob      22
Bob      4
4

2 に答える 2

3

SQL Server 2005以降では、分析関数を使用できます。

DECLARE @n INT
SET @n = 2

;WITH CTE AS 
(   SELECT a.name, b.col1, b.col2, ROW_NUMBER() OVER(PARTITION BY ColA ORDER BY a.identifier) Corr
    FROM name a
    INNER JOIN amount b
    ON a.identifier = b.acctid
    WHERE b.col2 != 'test'
)
SELECT *
FROM CTE
WHERE Corr <= @n

また、明示的な結合を使用するようにクエリを変更しました。

于 2012-05-07T16:02:08.447 に答える
1

ステップ1:

その情報を含む一時テーブルと、各ColAタイプの自動インクリメント値を含む別の列を作成します。

ステップ2:

新しい列が<n値であるすべての情報を選択します

于 2012-05-07T15:51:57.283 に答える