2016-06-18 21 views
0

は異なる値を、番号:221317ほとんどの行を返す選択は、私はのようにSQL Serverのクエリ持つSQL Serverの列

SELECT AC.Author_ID, A.Author_Name, AC.Paper_ID, AC.CoAuthor_ID, AP.Venue_ID, AC.Year 
FROM AuthorCoAuthor AC 
JOIN AuthorPaper  AP ON AP.Author_ID = AC.Author_ID AND 
         AP.Paper_ID = AC.Paper_ID 
JOIN Author   A ON A.Author_ID = AC.Author_ID 
ORDER BY AC.Author_ID, AC.Year, AC.Paper_ID, AC.CoAuthor_ID, AP.Venue_ID 

を。出力例は次のとおりです。

Author_ID | Author_Name | Paper_ID | CoAuthor_ID | Venue_ID | Year 
------------------------------------------------------------------ 
677  | Nuno Vasc | 812229 | 901706  | 64309 | 2005 
677  | Nuno Vasc | 812486 | 901706  | 65182 | 2005 
677  | Nuno Vasc | 818273 | 901706  | 185787 | 2007 
1359  | Peng Sui | 818373 | 457348  | 18534 | 2005 
1359  | Peng Sui | 868273 | 542321  | 184222 | 2006 
...  | ...   | ...  | ...   | ...  | ... 

私は、同じクエリに

WHERE COUNT(DISTINCT(AC.Author_ID)) <= 10 

このWHERE句を追加することで試したのに対し、私は、唯一の10の異なるAuthor_IDクエリによって返されるを持つようにしたいが、それでも私は」同じ数の行を取得します。つまり、通常はクエリで返されるすべてのデータです。

なぜ私のWHERE句はここでは機能しませんか?

+1

どの10の著者IDがトップ10ですか?ランダム10?トップシーケンシャル? –

+0

トップシーケンシャルID – maliks

+0

Matjediは –

答えて

1

10個別Author_IDを取得するには、あなたはTOP 10で BY GROUPを使用することができます。次に、結果(10行)を他の表と結合して、希望の列を表示します(select list)。

あなたはこれを試すことができます両方AuthorPaper & Author表は、これらのトップ10シーケンシャルのいずれかを持っていない場合、前の回答によって

SELECT AC.Author_ID, A.Author_Name, AC.Paper_ID, AC.CoAuthor_ID, AP.Venue_ID, AC.Year 
FROM 
(
    SELECT TOP (10) AC.Author_ID 
    FROM AuthorCoAuthor AC 
    GROUP BY AC.Author_ID 
    ORDER BY AC.Author_ID 
) DS 
JOIN AuthorCoAuthor AC ON AC.Author_ID = DS.Author_ID 
JOIN AuthorPaper  AP ON AP.Author_ID = AC.Author_ID AND 
        AP.Paper_ID = AC.Paper_ID 
JOIN Author   A ON A.Author_ID = AC.Author_ID 
ORDER BY AC.Author_ID, AC.Year, AC.Paper_ID, AC.CoAuthor_ID, AP.Venue_ID 

UPDATE

、あなたは以下の10 Distinct Authorを得ることができます著者。そのため、10 Distinct Authorが得られたら、が少なくとも10 Distinct Authorの場合に限り、常に10 Distinct Authorとなるように条件を確認する必要があります。だから、あなたはいつも10 Distinct Authorを得て、あなたはこれを使うことができます:

SELECT AC.Author_ID, A.Author_Name, AC.Paper_ID, AC.CoAuthor_ID, AP.Venue_ID, AC.Year 
FROM 
(
    SELECT TOP (10) AC.Author_ID 
    FROM AuthorCoAuthor AC 
    JOIN AuthorPaper AP 
     ON AP.Author_ID = AC.Author_ID 
     AND AP.Paper_ID = AC.Paper_ID 
    JOIN Author A ON A.Author_ID = AC.Author_ID 
    GROUP BY AC.Author_ID 
    ORDER BY AC.Author_ID 
) DS 
JOIN AuthorCoAuthor AC ON AC.Author_ID = DS.Author_ID 
JOIN AuthorPaper AP 
    ON AP.Author_ID = AC.Author_ID 
     AND AP.Paper_ID = AC.Paper_ID 
JOIN Author A ON A.Author_ID = AC.Author_ID 
ORDER BY AC.Author_ID, AC.Year, AC.Paper_ID, AC.CoAuthor_ID, AP.Venue_ID 
+0

TOP(10)にDISTINCTキーワードを使用できないようにする – maliks

+0

答えを更新しました。今すぐチェックしてください。 –

+0

あなたがそれを更新するとすぐにその罰金 – maliks

関連する問題