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

时间:2013-01-13 18:39:34

标签: sql sql-server tsql

我有一个表Request和表SearchRequest表有一个ID列,它是Search中作为RequestID的外键。 Search中可以有多个具有相同RequestID的行。 Search状态中还有另一列,可以是“完成”或“不完整”。我想要的是一个为每个RequestID返回的查询:

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

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

1 个答案:

答案 0 :(得分: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

如果您想列出每个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

请参阅SQLFiddle