目前正在研究报告。我需要的是样品台,
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]
我对您发布的数据做了一些假设。
首先,您发布的所有值均以年份为单位,2011但最终的结束日期与列标题不对应2011,它们是的Sunday值,2012因此我更改了数据。也是的最后一个条目Early ASN 8/15/2011 12:00,我相信应该是一个Late ASN条目,否则总和要匹配。
2011
Sunday
2012
Early ASN 8/15/2011 12:00
Late ASN
要获得结果,您希望应用该PIVOT功能。此功能使您可以汇总值,然后将其转换为列。
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