Show data in columns by week name in SQL Server 2008 -


i'm looking efficient way convert columns week name in sql server.

this example:

id  value   ondate 1   10      06/05/2013       2   9       07/05/2013       3   5       08/05/2013       4   89      09/05/2013       5   8       10/05/2013   

scenario #1:

  • start date : 06/05/2013 (monday)
  • end date : 14/05/2013 (thursday)

this result:

       mo   tu   th  fr  sa  su row1   10   9   5   89  8   23  3 row2    5   8 

scenario #2:

  • start date : 06/05/2013 (monday)
  • end date : 07/05/2013 (thursday)

this desired result:

        mo   tu row1    10    9 

how can build result?

use sum(case... below pivot data across days columns (or pivot operator). also, consider how multiple years might affect results, , adjust grouping accordingly.

set dateformat dmy; set datefirst 1; --monday  declare @yourtable table (id int, value int, ondate datetime) insert @yourtable     select 1,   10, '06/05/2013' union          select 2,   9,  '07/05/2013' union           select 3,   5,  '08/05/2013' union           select 4,   89, '09/05/2013' union           select 5,   8,  '10/05/2013' union     select 6,   23, '11/05/2013' union     select 7,   3,  '12/05/2013' union     select 8,   5,  '13/05/2013' union     select 9,   8,  '14/05/2013'  select  [mo]=sum(case when datename(weekday, ondate) = 'monday' value else 0 end),         [tu]=sum(case when datename(weekday, ondate) = 'tuesday' value else 0 end),         [we]=sum(case when datename(weekday, ondate) = 'wednesday' value else 0 end),         [th]=sum(case when datename(weekday, ondate) = 'thursday' value else 0 end),         [fr]=sum(case when datename(weekday, ondate) = 'friday' value else 0 end),         [sa]=sum(case when datename(weekday, ondate) = 'saturday' value else 0 end),         [su]=sum(case when datename(weekday, ondate) = 'sunday' value else 0 end)    @yourtable   ondate between '06/05/2013' , '14/05/2013' group      datepart(week, ondate);  -- result: /* mo  tu   th  fr  sa  su 10  9   5   89  8   23  3 5   8   0   0   0   0   0 */ 

Comments