0

嗨,我有两个要查询的表:

第一个被调用bugs并具有列:

bg_id , bg_project , bg_reported_date

第二个被调用Projects并具有列:

pj_id , pj_name , pj_parent_id

的代表的。bg_project_bugspj_idProjects

我想计算每个父项目在一个月内有多少 bg_id。查询应该是什么以获得如下所示的结果:ProjectParentName , Count

一个父项目不能有另一个父项目。
如果项目是父项目,那么它将具有与 pj_parent_id 相同的 pj_id。
这是一个例子:

pj_id   pj_name     pj_parent_id

1       Parent1     1
2       Child1      1

提前致谢

4

2 回答 2

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如果您想要二月。是可选
的。ORDER BY

为了显示没有错误的项目,我们需要LEFT JOIN. -WHERE子句必须在子选择中,否则它将消除没有错误的项目。

编辑:我更新了查询。我认为它现在应该得到预期的结果。

于 2013-03-04T07:51:11.010 回答
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'));
于 2013-03-04T06:28:53.637 回答