2016-11-23 72 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中查詢...讓我們用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

哇!搞定了!我不認爲這會很簡單! –