2012-10-05 121 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

相关问题