2013-02-01 22 views
0

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,所以請很好。如果我遺漏了任何信息,我會很樂意添加它以使其發揮作用。

謝謝

回答

0

您能否澄清一下您期待的結果I.e.你是否期待每週inc_cat_sc? 如果是這樣,您需要跨所有星期加入您查看的日期,並使用where子句生成計數。

+0

是的我每週都在尋找每一個inc_cat_sc。我不熟悉如何交叉連接,你能提供一個例子嗎? –

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的一個列嗎?

+0

這給我一個關於使用非ANSI外連接運算符的錯誤。我如何編寫包含所有其他表的外連接? –