2016-11-23 69 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

哇!搞定了!我不认为这会很简单! –