在“按分组查询”中包含缺少的周数

时间:2013-02-01 15:40:41

标签: sql-server group-by

已经有类似的问题,例如this,但我似乎无法让它为我工作。也许是因为我有几张桌子要加入。

这里的任何一种方式都是我的查询:

    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很新,所以请你好。如果我遗漏了任何信息,我会很乐意添加它以使其发挥作用。

由于

2 个答案:

答案 0 :(得分:0)

请您澄清一下您期望的结果。你是否每个星期都期待每一个inc_cat_sc? 如果是这样,您将需要在所查看的日期期间交叉加入所有周,并使用where子句生成计数。

答案 1 :(得分:0)

你必须使用“inc_cat ic”进行外连接

如果你想每周“ic.inc_cat_sc”

包括计数(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的一串吗?