SELECT
callTrackingId,
count(id) AS orders,
STUFF((SELECT ','+ reviewStatus FROM ct_callOrder WHERE callTRackingId=co.callTrackingId GROUP BY reviewStatus FOR XML PATH('')) , 1 , 1 , '' ) as status
FROM ct_callorder co with (nolock)
WHERE CONTAINS(status, 'NEEDS_REVIEW')
GROUP BY callTrackingId
ORDER BY callTrackinIid ASC
我有一个包含多行的表,其中一些具有相同的callTrackingId,我想要计算其中有多少行具有相同的trackingid。此外,我需要能够根据至少一个状态是否等于我正在寻找的状态来过滤它。我设法在列表中获取所有状态,但是当我尝试使用where where过滤它时,我得到一个错误。我猜测它,因为该列表可能是在调用where子句后创建的。关于如何过滤它的任何想法?
数据样本:
callTrackingId | reviewStatus
1 | NEEDS_REVIEW
1 | APPROVED
2 | APPROVED
因此,如果我按NEEDS_REVIEW过滤它,那么我应该
callTrackingId | count
1 | 2
如果按APPROVED过滤,那么我应该
callTrackingId | count
1 | 2
2 | 1
感谢任何帮助, 谢谢
PS:DB是MSSQL 20xx
答案 0 :(得分:2)
您可以使用HAVING
根据汇总进行过滤,在这种情况下使用SUM()
条件CASE
:
SELECT
callTrackingId,
count(callTrackingId) AS orders
FROM Table1 co
GROUP BY callTrackingId
HAVING SUM(CASE WHEN reviewStatus = 'NEEDS_REVIEW' THEN 1 END) >= 1
演示:SQL Fiddle