CREATE TABLE [dbo].[TestGrid]( [ID] [int] IDENTITY(1,1) NOT NULL, [CompanyName] [varchar](200) NOT NULL, [DateID] [int] NOT NULL, [High] [float] NOT NULL, [Low] [float] NOT NULL)INSERT INTO [dbo].[TestGrid] (CompanyName,DateID,High,Low)VALUES ('ABC',20121201,0.5,1.0)INSERT INTO [dbo].[TestGrid] (CompanyName,DateID,High,Low)VALUES ('ABC',20121202,0.6,1.5)INSERT INTO [dbo].[TestGrid] (CompanyName,DateID,High,Low)VALUES ('ABC',20121203,1.0,1.6)INSERT INTO [dbo].[TestGrid] (CompanyName,DateID,High,Low)VALUES ('XYZ',20121201,0.5,0.4)INSERT INTO [dbo].[TestGrid] (CompanyName,DateID,High,Low)VALUES ('XYZ',20121202,0.6,0.5)INSERT INTO [dbo].[TestGrid] (CompanyName,DateID,High,Low)VALUES ('XYZ',20121203,1.0,0.6)
ID CompanyName DateID High Low----------- ----------------------------------------------------------1 ABC 20121201 0.5 0.12 ABC 20121202 0.6 0.53 ABC 20121203 1 0.64 XYZ 20121201 0.5 0.45 XYZ 20121202 0.6 0.56 XYZ 20121203 1 0.6
NAME TYPE MONDAY TUESDAY WEDNESDAYABC HIGH 0.5 0.6 1ABC LOW 0.1 1.5 0.6
SELECT CompanyName, Type ,Sunday=MAX(CASE WHEN weekday = 1 THEN Val END) ,Monday=MAX(CASE WHEN weekday = 2 THEN Val END) ,Tuesday=MAX(CASE WHEN weekday = 3 THEN Val END) ,Wednesday=MAX(CASE WHEN weekday = 4 THEN Val END) ,Thursday=MAX(CASE WHEN weekday = 5 THEN Val END) ,Friday=MAX(CASE WHEN weekday = 6 THEN Val END) ,Saturday=MAX(CASE WHEN weekday = 7 THEN Val END)FROM dbo.TestGridCROSS APPLY ( VALUES(High, 'High', DATEPART(dw, CAST(DateID AS CHAR(8)))) ,(Low, 'Low', DATEPART(dw, CAST(DateID AS CHAR(8))))) a(Val, Type, weekday)GROUP BY CompanyName, Type
SELECT CompanyName ,Type ,Sunday = MAX(CASE WHEN weekday = datename(dw, dateadd(dd, 1 - 2, '19000101')) THEN Val END) ,Monday = MAX(CASE WHEN weekday = datename(dw, dateadd(dd, 2 - 2, '19000101')) THEN Val END) ,Tuesday = MAX(CASE WHEN weekday = datename(dw, dateadd(dd, 3 - 2, '19000101')) THEN Val END) ,Wednesday = MAX(CASE WHEN weekday = datename(dw, dateadd(dd, 4 - 2, '19000101')) THEN Val END) ,Thursday = MAX(CASE WHEN weekday = datename(dw, dateadd(dd, 5 - 2, '19000101')) THEN Val END) ,Friday = MAX(CASE WHEN weekday = datename(dw, dateadd(dd, 6 - 2, '19000101')) THEN Val END) ,Saturday = MAX(CASE WHEN weekday = datename(dw, dateadd(dd, 7 - 2, '19000101')) THEN Val END)FROM dbo.TestGridCROSS APPLY ( VALUES(High, 'High', DATENAME(dw, CAST(DateID AS CHAR(8)))) ,(Low, 'Low', DATENAME(dw, CAST(DateID AS CHAR(8))))) a(Val, Type, weekday)GROUP BY CompanyName, Type;
SELECT datename(dw, dateadd(day, 1 - 2, '19000101')) -- for Sunday
SELECT CompanyName, 'Low' as Type,[Sunday], [Monday], [tuesday], [wednesday], [thursday],[Friday],[Saturday]FROM( select CompanyName, Low, CASE WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 1 THEN 'Sunday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 2 THEN 'Monday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 3 THEN 'tuesday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 4 THEN 'wednesday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 5 THEN 'thursday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 6 THEN 'Friday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 7 THEN 'Saturday' END as WeekDays from [TestGrid]) AS SourceTablePIVOT( SUM(Low) FOR WeekDays IN ([Sunday], [Monday], [tuesday], [wednesday], [thursday],[Friday],[Saturday])) AS PivotTableUNION SELECT CompanyName, 'High' as Type,[Sunday], [Monday], [tuesday], [wednesday], [thursday],[Friday],[Saturday]FROM( select CompanyName, High, CASE WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 1 THEN 'Sunday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 2 THEN 'Monday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 3 THEN 'tuesday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 4 THEN 'wednesday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 5 THEN 'thursday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 6 THEN 'Friday' WHEN DATEPART(dw, CAST(DateID AS CHAR(8))) = 7 THEN 'Saturday' END as WeekDays from [TestGrid]) AS SourceTablePIVOT( SUM(High) FOR WeekDays IN ([Sunday], [Monday], [tuesday], [wednesday], [thursday],[Friday],[Saturday])) AS PivotTable
CROSS APPLY ( VALUES(High, 'High', DATEPART(dw, CAST(DateID AS CHAR(8)))) ,(Low, 'Low', DATEPART(dw, CAST(DateID AS CHAR(8))))) a(Val, Type, weekday)GROUP BY CompanyName, Type