您好我有两个表,我想查询:
第一个名为bugs
并且有列:
bg_id , bg_project , bg_reported_date
第二个名为Projects
并且有列:
pj_id , pj_name , pj_parent_id
bg_project
的{{1}}代表bugs
的{{1}}。
我想知道每个父项目在一个月内我有多少bg_id。
查询的结果应该是什么:pj_id
父项目不能拥有另一个父项目 如果项目是父项目,那么它将具有与pj_parent_id相同的pj_id 这是一个例子:
Projects
提前致谢
答案 0 :(得分:0)
这对你有用吗?在黑暗中半拍。暂时没有做过SQL。
SELECT COUNT(bugs.bg_project) AS BugCount,
bugs.bg_reported_date AS BugReportDate,
Projects.pj_name as ProjectParentName,
Projects.pj_id AS ProjectID
FROM bugs
JOIN Projects
WHERE ProjectID = bugs.bg_project
AND (BugReportDate BETWEEN to_date('YEAR/2digitmonth/01','yyyy/mm/dd')
AND to_date('YEAR/2digitmonth/lastday','yyyy/mm/dd'));
答案 1 :(得分:0)
我就是这样做的:
WITH bugsInPeriod
AS ( SELECT *
FROM bugs
WHERE MONTH(bg_reported_date) = MONTH(GETDATE())
)
SELECT pParent.pj_name AS ProjectParentName ,
COUNT(bg_id) AS [Count]
FROM Projects pParent
INNER JOIN Projects pChild ON pParent.pj_id = pChild.pj_parent_id
LEFT JOIN bugsInPeriod b ON pChild.pj_id = b.bg_project
WHERE pParent.pj_id = pParent.pj_parent_id
GROUP BY pParent.pj_name
ORDER BY pParent.pj_name
将MONTH(GETDATE())
替换为所需的月份编号,例如2
如果你想要2月份
ORDER BY
是可选的。
为了显示没有错误的项目,我们需要LEFT JOIN
。 WHERE
- 子句必须在子选择中,否则它将消除没有错误的项目。
修改:我更新了查询。我认为它现在应该得到预期的结果。