2016-11-23 3 views
1

このクエリは、複数の行を持つ可能性のある結合の最初の行のみを正常に返します。私は置き換えている今、何をしたいか結合で返された行の数のカウント

WITH RevisionProducts AS (
    SELECT 
     qr.LeadID, 
     p.Code, 
     ROW_NUMBER() OVER(PARTITION BY qr.LeadID ORDER BY qr.LeadID DESC) rownumber 
    FROM  
     QuoteRevisions qr 
     JOIN ... 
) 
SELECT 
    l.LeadID, 
    ... 
    co.Name, 
    rp1.Code, 
    0 AS CodeCount 
FROM 
    Leads l 
    JOIN Companies co on co.CompanyID = l.CompanyID 
    JOIN RevisionProducts rp1 ON rp1.LeadID = l.ID AND rp1.rownumber = 1 

...

0 AS CodeCount 

... 参加で返されたであろう実際の行数と、我々はそれらすべてを許可されていました。これを行う方法を理解できません。

CTEが必要なのかどうか分かりませんが、カウントのために同じクエリを再度参照する必要がある可能性が高いため、CTEが便利かもしれません。

EDIT:

[OK]を、私はより明確にする必要があるようです。したがって、CTEでのクエリはWHERE句で実行してみましょう:

SELECT 
     qr.LeadID, 
     p.Code, 
     ROW_NUMBER() OVER(PARTITION BY qr.LeadID ORDER BY qr.LeadID DESC) rownumber 
    FROM  
     QuoteRevisions qr 
     JOIN ... 
    WHERE 
     qr.LeadID = 151 

クエリが5行を返したとしましょう。したがって、最初のクエリでは、最初の行だけに結合を制限しないと、Lead.LeadIDが151になったときに結合が5行返されます。したがって、最終データセットでは、5行rp1.Code列以外は同じです。

私はすでに行の数を1に制限しています。これは私が望むものです。しかし今、返された行の数を知りたい。

私はそれがより理にかなってほしいです。

+0

私は完全にここで混乱しています。 「参加したときに返されただろう、私たちすべてが許された」とはどういう意味ですか?私は何度も何度もそれを読んできましたが、それはまったく意味がありません。いくつかのグループごとに行数を取得しようとしていますか?あなたはCOUNTを使って見ましたか?私たちがここで助けることができる前に、あなたはいくつかの詳細を提供しなければならないでしょう。これは始めるのに適しています。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

フィードバックが良いです。 OP –

答えて

4

どうやってこのようなことができますか?

WITH RevisionProducts AS (
    SELECT 
     qr.LeadID, 
     p.Code, 
     ROW_NUMBER() OVER(PARTITION BY qr.LeadID ORDER BY qr.LeadID DESC) rownumber 
     COUNT(*) OVER(PARTITION BY qr.LeadID) rowcount 
    FROM  
     QuoteRevisions qr 
     JOIN ... 
) 
SELECT 
    l.ID, 
    ... 
    co.Name, 
    rp1.Code, 
    rp1.rowcount AS CodeCount 
FROM 
    Leads l 
    JOIN Companies co on co.CompanyID = l.CompanyID 
    JOIN RevisionProducts rp1 ON rp1.LeadID = l.ID AND rp1.rownumber = 1 
+1

うわーに私の編集を参照してください!ばっちり成功!私はそれが簡単だろうとは思わなかった! –

関連する問題