2016-12-16 7 views
-2

SQL DISTINCT TOP 30

SELECT TOP 30 s.fid, s.productid, s.partsreplaced, s.labor, p.part_number, p.name, p.img_small, p.discontinued 
FROM frequentrepairs s 
INNER JOIN products p ON s.productid = p.id  
ORDER BY p.part_number ASC 

私はこれを試してみました:データサンプルを提供しないことについて申し訳ありません

SELECT TOP 30 s.fid, s.productid, s.partsreplaced, s.labor, p.part_number, p.name, p.img_small, p.discontinued 
FROM (SELECT DISTINCT productid FROM frequentrepairs) frequentrepairs s 
INNER JOIN products p ON s.productid = p.id  
ORDER BY p.part_number ASC 

を。ここでは、私のテーブルFrequentRepairsがどのように見えるかです:

enter image description here

だから、基本的に、私は二度同じ「商品コード」を表示したくありません。

+4

何が起こったのですか?私たちはあなたのデータがどのように見えるか、あなたの出力がどのように見えるか分かりません。 – dfundako

+0

英語で何を達成しようとしていますか?単一のフィールドを区別することはできません。テーブルFrequentRepairsにはいくつかの部分があるようですが、単一の製品に結びついて複数の製品IDを取得しているのです...いくつかのサンプルデータと期待される結果を提供して、なぜ。 – xQbert

+0

1)一意のプロダクトIDを持つ30の任意の行が必要ですか? 2)TOP 30の製品IDに属するすべての行? 3)何か完全に?間違ったSQLからの望ましい出力を分割するのは難しいです。 –

答えて

0

開始日: 私が抱えている問題は、まだ質問/問題を理解していないということです。

と仮定:

  1. Products.IDが主キーです。
  2. FrequentRepairs.ProductIDは、製品とFrequentRepairsの関係は多くの
  3. に1であるあなたが達成しようとしているものの全体的な目標はトップ30の部品のリストであるProducts.ID
  4. への外部キーであります最も修復に関与していますか?

SELECT TOP 30 
     max(s.fid) as max_fid 
    , p.productid 
    , max(s.partsreplaced) as partsReplaced --(just picking 1) 
     --if it needs to be coorlated to the max_FID then we would have 
     --to dos something different 
    , sum(s.labor) as Sum_labor 
    , p.part_number 
    , p.name 
    , p.img_small 
    , p.discontinued 
FROM frequentrepairs s 
INNER JOIN products p 
    ON s.productid = p.id  
GROUP BY p.Part_number, P.Name, p.img_small, p.Discontinued, 
ORDER BY count(p.part_number) DESC, part_number ASC 
+0

's'の近くに不正な構文を取得しています。これに。 – Brasciole

+0

'frequentrepairs s'は' frequentrepairs'を削除しました – xQbert

+0

実際には、それはFROM(SELECT DISTINCT productid FROM frequentrepairs s)であるべきだと思いますが、INNER JOIN(AS、IDまたはQUOTED_IDが必要です)のエラーが表示されます – Brasciole