2012-10-05 195 views
-2

目前我正在撰寫報告。我需要的是 樣品臺,如何在sql中每週分組到最近六週的星期日日期?

Instance Type Sep-23 Sep-16 Sep-09 Sep-02 Aug-26 Aug-19 
------------------------------------------------------------------------- 
Early ASN  4  2  4  1  1  2 
Late ASN   2  1  5  3  1  1 
    Sum   6  3  9  4  2  3 

但實際的表是,

SPGI01_INSTANCE_TYPE_C SPGI01_CREATE_S 
-------------------------------------------------------------- 
Early ASN    9/17/2012 12:00:00.000 
Early ASN   9/18/2012 10:06:11.000 
Early ASN   9/19/2012 8:00:04.000 
Early ASN   9/20/2012 3:00:05.000 
Early ASN   9/10/2012 12:00:07.000 
Early ASN   9/11/2012 12:00:32.000 
Early ASN   9/3/2012 12:00:17.000 
Early ASN   9/4/2012 10:06:00.000 
Early ASN   9/5/2012 8:00:00.000 
Early ASN   9/6/2012 3:00:00.000 
Early ASN   8/31/2012 12:00:00.000 
Early ASN   8/26/2012 12:00:00.000 
Early ASN   8/14/2012 12:00:00.000 
Early ASN   8/15/2012 12:00:00.000 
Late ASN   9/17/2012 12:00:00.000 
Late ASN   9/18/2012 10:06:00.000 
Late ASN   9/11/2012 12:00:00.000 
Late ASN   9/3/2012 12:00:00.000 
Late ASN   9/4/2012 10:06:00.000 
Late ASN   9/5/2012 8:00:00.000 
Late ASN   9/6/2012 3:00:00.000 
Late ASN   9/6/2012 2:00:00.000 
Late ASN   8/31/2012 12:00:00.000 
Late ASN   8/31/2012 12:00:00.000 
Late ASN   8/31/2012 12:00:00.000 
Early ASN   8/15/2012 12:00:00.000 

我需要一羣以「SPGI01_INSTANCE_TYPE_C」欄目和組每週星期天高達最後六個星期的星期天。在這裏,我粘貼了兩張樣本表,一張表是我想要的,另一張表是我擁有的。給我這個解決方案。

我的查詢,

SELECT distinct I01.[SPGI01_INSTANCE_TYPE_C], 
count (I01.[SPGI01_INSTANCE_TYPE_C]) 
    FROM [SUPER-G].[dbo].[CSPGI01_ASN_ACCURACY] I01, 
    [SUPER-G].[dbo].[CSPGI50_VALID_INSTANCE_TYPE] I50 

where 
I01.[SPGA02_BUSINESS_TYPE_C] = 'prod' 
and 
I01.[SPGA03_REGION_C] in('ap','na','sa','eu') 
and 
I01.[SPGI01_SUB_BUSINESS_TYPE_C] = 'PRD' 
and 
(I01.[SPGI01_CREATE_S] between '2012-01-01 12:00:00.000' AND DATEADD(day , 7, '2012-01-15 00:00:00.000')) 

and 
I01.[SPGI01_EXCEPTIONED_F] = 'N' 
and 
I01.[SPGI01_DISPUTED_F] != 'Y' 
and 
I50.[SPGI50_INSTANCE_TYPE_C] = I01.[SPGI01_INSTANCE_TYPE_C] 
and 
I50.[SPGA04_RATING_ELEMENT_D] = 1 
group by I01.[SPGI01_INSTANCE_TYPE_C] 
+0

如前所述,加一些工作查詢,不要緊,這是錯的,是一個起點,也許你是不是從正確的遠。 – Yaroslav

+0

星期天你問'GROUP BY',但你發佈的日期是星期五,這是你想要的正確日期? – Taryn

回答

1

我做了關於您發佈數據的一些假設。

首先,您發佈的所有狀態值年爲2011但最終結束日期列標題不符合2011,他們是2012Sunday值,所以我改變了數據。也是最後的條目Early ASN 8/15/2011 12:00,我相信應該是Late ASN條目,否則總數要匹配。

要獲得結果,您希望您將要應用PIVOT函數。該功能允許您彙總這些值,然後將它們轉換爲列。

SET DATEFIRST 1 -- set this so the start of the week is Sunday 
select InstanceType, 
    sum([39]) as Sep_23, 
    sum([38]) as Sep_16, 
    sum([37]) as Sep_09, 
    sum([36]) as Sep_02, 
    sum([35]) as Aug_26, 
    sum([34]) as Aug_19 
from 
(
    select SPGI01_INSTANCE_TYPE_C as InstanceType, 
    [39], [38], [37], [36], [35], [34] 
    from 
    (
    select SPGI01_INSTANCE_TYPE_C, 
     DatePart(wk, SPGI01_CREATE_S) WeekNo, 
     DATEADD(DAY, 7 -DATEPART(WEEKDAY,SPGI01_CREATE_S),SPGI01_CREATE_S) WeekEnd 
    from table1 
) x 
    pivot 
    (
    count(WeekEnd) 
    for weekno in ([39], [38], [37], [36], [35], [34]) 
) p 
) x1 
group by InstanceType with rollup 

SQL Fiddle with Demo

+0

感謝您的回覆。我檢查並讓你知道。 –

+0

嗨bluefeet,我已經添加了我的查詢,我需要加入兩個talbe並獲得這些值。我希望在這裏很容易理解。 –

+0

@ThinkWhoiam然後你應該創建一個[SQL小提琴](http://sqlfiddle.com/)來自兩個表的工作數據。 – Taryn

相關問題