此查询仅成功返回可能包含多行的连接的第一行。
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 :(得分: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