0

こんにちは私はクエリしたい2つのテーブルがあります:

最初のものが呼び出されbugs、列があります。

bg_id , bg_project , bg_reported_date

2つ目は呼び出されProjects、列があります。

pj_id , pj_name , pj_parent_id

bg_projectofはのをbugs表しpj_idますProjects

親プロジェクトごとに、1か月に持っていた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、2 月が必要な場合です。
ORDER BYオプションです。

バグのないプロジェクトを表示するには、LEFT JOIN. WHERE-clause は副選択に含まれている必要があります。そうしないと、バグのないプロジェクトが除外されます。

編集:クエリを更新しました。これで、望ましい結果が得られるはずだと思います。

于 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 に答える