SQL从连接表中计算值

时间:2013-03-04 06:09:59

标签: sql-server

您好我有两个表,我想查询:

第一个名为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

提前致谢

2 个答案:

答案 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 JOINWHERE - 子句必须在子选择中,否则它将消除没有错误的项目。

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