一次计算两个不同的子行条件

cos*_*ost 1 sql t-sql sql-server

我有一张桌子Request和桌子Search.该Request表有一个ID列,它是SearchRequestID中的外键.Search使用相同的RequestID 可以有多行.SearchStatus中还有另一列,可以是Complete或Incomplete.我想要的是一个为每个RequestID返回的查询:

RequestID- Count of Search rows with 'Complete'-Count of Search rows with 'Incomplete'

这可以通过SQL轻松完成吗?

xle*_*ier 6

试试:

SELECT RequestId,
SUM(CASE WHEN Status = 'Complete' THEN 1 ELSE 0 END),
SUM(CASE WHEN Status = 'Incomplete' THEN 1 ELSE 0 END)
FROM Search
GROUP BY RequestId
Run Code Online (Sandbox Code Playgroud)

如果您想列出每个RequestId,即使此请求没有搜索,您可以执行以下操作:

SELECT r.Id,
SUM(CASE WHEN s.Status = 'Complete' THEN 1 ELSE 0 END),
SUM(CASE WHEN s.Status = 'Incomplete' THEN 1 ELSE 0 END)
FROM Request r
LEFT JOIN Search s ON r.Id = s.RequestId
GROUP BY r.Id
Run Code Online (Sandbox Code Playgroud)

请参见SQLFiddle