我有一个表Request
和表Search
。 Request
表有一个ID列,它是Search
中作为RequestID的外键。 Search
中可以有多个具有相同RequestID的行。 Search
状态中还有另一列,可以是“完成”或“不完整”。我想要的是一个为每个RequestID返回的查询:
RequestID
- Count of Search rows with 'Complete'
- Count of Search rows with 'Incomplete'
这可以通过SQL轻松完成吗?
答案 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