0

このような同様の質問が既にありますが、私にはうまくいかないようです。参加するテーブルがいくつかあるためかもしれません。

いずれにせよ、ここに私のクエリがあります:

    DECLARE     @StartDate datetime2, @EndDate datetime2;
SET     @StartDate = DateAdd(day, -7, GETDATE());
SET     @EndDate = DateAdd(year, 1, GETDATE());

WITH    Weeks AS
(
        SELECT  @StartDate AS WeekDate
        UNION   ALL
        SELECT  DATEADD(day, 7, WeekDate)
        FROM    Weeks
        WHERE   DATEADD(day, 7, WeekDate) <= @EndDate
)
SELECT      WeekDate AS WeekOfSRUs
            ,ISNULL(COUNT(i.incident_id), 0) AS SRUCount
            --,i.incident_id
            ,ic.inc_cat_sc
FROM        Weeks
            ,incident i
            ,JPTSYS_WEB_CUST_PROP_CONT
            ,JPTSYS_WEB_CUST_PROP
            ,JPTSYS_WEB_LKUP_DATA
            ,JPTSYS_WEB_LKUP
            ,JPTSYS_WEB_CUST_PROP_MULT
            ,inc_cat ic
WHERE       (i.INCIDENT_ID=JPTSYS_WEB_CUST_PROP_CONT.ENTITY_ID AND
            JPTSYS_WEB_CUST_PROP_CONT.JPTSYS_WEB_CUST_PROP_ID=JPTSYS_WEB_CUST_PROP.JPTSYS_WEB_CUST_PROP_ID AND  
            JPTSYS_WEB_CUST_PROP_CONT.SINGLE_SEL_VAL_ID=JPTSYS_WEB_LKUP_DATA.JPTSYS_WEB_LKUP_DATA_ID AND
            JPTSYS_WEB_CUST_PROP.JPTSYS_WEB_LKUP_ID=JPTSYS_WEB_LKUP.JPTSYS_WEB_LKUP_ID AND
            JPTSYS_WEB_LKUP_DATA.JPTSYS_WEB_LKUP_DATA_ID=JPTSYS_WEB_CUST_PROP_MULT.JPTSYS_WEB_LKUP_DATA_ID AND
            JPTSYS_WEB_CUST_PROP.JPTSYS_WEB_CUST_PROP_ID =59) AND
            (JPTSYS_WEB_CUST_PROP_CONT.DATE_VAL >= WeekDate AND JPTSYS_WEB_CUST_PROP_CONT.DATE_VAL < DATEADD(day, 7, WeekDate)) AND
            (inc_cat_sc = 'R1A DESKTOPMIN' OR inc_cat_sc = 'R1B DESKTOPMAJ' OR inc_cat_sc = 'R8A CRTPATCH-DT') AND i.inc_cat_id = ic.inc_cat_id
GROUP BY    ic.inc_cat_sc, Weeks.WeekDate
ORDER BY    Weeks.WeekDate

そして結果:

WeekOfSRUs                  SRUCount   inc_cat_sc
2013-01-25 10:06:57.2370000    4       R1A DESKTOPMIN
2013-01-25 10:06:57.2370000    1       R1B DESKTOPMAJ
2013-02-01 10:06:57.2370000    4       R1A DESKTOPMIN
2013-02-08 10:06:57.2370000    2       R1A DESKTOPMIN
2013-02-08 10:06:57.2370000    1       R1B DESKTOPMAJ
2013-02-15 10:06:57.2370000    3       R1A DESKTOPMIN
2013-02-15 10:06:57.2370000    2       R1B DESKTOPMAJ
2013-02-15 10:06:57.2370000    2       R8A CRTPATCH-DT
2013-02-22 10:06:57.2370000    3       R1A DESKTOPMIN
2013-02-22 10:06:57.2370000    4       R1B DESKTOPMAJ
2013-03-01 10:06:57.2370000    5       R1A DESKTOPMIN
2013-03-08 10:06:57.2370000    4       R1A DESKTOPMIN
2013-03-15 10:06:57.2370000    2       R8A CRTPATCH-DT
2013-03-22 10:06:57.2370000    1       R1A DESKTOPMIN
2013-03-29 10:06:57.2370000    1       R1B DESKTOPMAJ
2013-05-03 10:06:57.2370000    1       R1B DESKTOPMAJ
2013-05-10 10:06:57.2370000    1       R1A DESKTOPMIN

参照されているすべてのテーブルに関して、これは契約製品であり、使用を余儀なくされており、データベースの設計/スキーマを制御することはできません。これらの結合は、インストール後に追加されたカスタム フィールドであるため、探している特定のフィールドを取得するために必要であると言われました。

上に投稿したリンクから、クエリをLEFT JOINすべてのテーブルに変更しましたが、それでも同じ結果が得られました。

私は中級/上級SQLにかなり慣れていないので、よろしくお願いします。情報を省略した場合は、これを機能させるために喜んで追加します。

ありがとう

4

2 に答える 2

0

inc_cat_sc ごとに毎週、どのような結果が期待されているのかを明確にしていただけますか? その場合は、対象の日付期間のすべての週を結合し、where 句を使用してカウントを生成する必要があります。

于 2013-02-01T16:09:18.313 に答える
0

「inc_cat ic」で外部結合を作成する必要があります

「ic.inc_cat_sc」ごとに毎週したい場合

count(i.incident_id) が 0 の場合を含む

を変更してみてください

AND i.inc_cat_id = ic.inc_cat_id 

為に

AND i.inc_cat_id =* ic.inc_cat_id

inc_cat_sc は ic.inc_cat_sc の列ですよね?

于 2013-02-01T16:32:35.280 に答える