March 13, 2017 at 1:14 pm
Hi Team,
I need your help on my report.
Scripts
CREATE TABLE [dbo].[Sampletable](
   [VBLOCK] [nvarchar](50) NULL,
     [VM]  [nvarchar](50) NOT NULL,
     [CreatedDate] [date] NOT NULL,
   [CPU] [smallint] NULL
)
GO
INSERT [dbo].[Sampletable] ([VBLOCK], [VM], [CreatedDate], [CPU]) VALUES (N'VBlock001', 'vm001', '01-SEP-2016',15)
INSERT [dbo].[Sampletable] ([VBLOCK], [VM], [CreatedDate], [CPU]) VALUES (N'VBlock001', 'vm001', '02-SEP-2016',45)
INSERT [dbo].[Sampletable] ([VBLOCK], [VM], [CreatedDate], [CPU]) VALUES (N'VBlock001', 'vm001', '03-SEP-2016',6)
INSERT [dbo].[Sampletable] ([VBLOCK], [VM], [CreatedDate], [CPU]) VALUES (N'VBlock001', 'vm001', '04-SEP-2016',55)
INSERT [dbo].[Sampletable] ([VBLOCK], [VM], [CreatedDate], [CPU]) VALUES (N'VBlock001', 'vm001', '05-SEP-2016',25)
INSERT [dbo].[Sampletable] ([VBLOCK], [VM], [CreatedDate], [CPU]) VALUES (N'VBlock002', 'vm002', '01-SEP-2016',2)
INSERT [dbo].[Sampletable] ([VBLOCK], [VM], [CreatedDate], [CPU]) VALUES (N'VBlock002', 'vm002', '02-SEP-2016',15)
INSERT [dbo].[Sampletable] ([VBLOCK], [VM], [CreatedDate], [CPU]) VALUES (N'VBlock002', 'vm002', '03-SEP-2016',20)
INSERT [dbo].[Sampletable] ([VBLOCK], [VM], [CreatedDate], [CPU]) VALUES (N'VBlock002', 'vm002', '04-SEP-2016',25)
GO
SELECT * FROM [dbo].[Sampletable] 
GO
VBLOCK        VM     CreatedDate    CPU
VBlock001    vm001    2016-09-01    15
VBlock001    vm001    2016-09-02    45
VBlock001    vm001    2016-09-03    6
VBlock001    vm001    2016-09-04    55
VBlock001    vm001    2016-09-05    25
VBlock002    vm002    2016-09-01    2
VBlock002    vm002    2016-09-02    15
VBlock002    vm002    2016-09-03    20
VBlock002    vm002    2016-09-04    25
I want o/p like this ( aggregate function with column to row conversion)
Vblock         VM         CPU Average    CPU Max        Day 1    Day 2    Day 3    Day 4    Day 5
VBlock001    vm001         29.2                     55              15        45          6           55        25
VBlock002    vm002         15.5                     25                2        15        20           25    
Plese help me to solve this issue
March 13, 2017 at 1:54 pm
Personally, I would create my query, something like below, and then use my presentation layer (SSRS & a matrix, Excel & a pivot table, for example), and pivot the data.SELECT ST.VBLOCK, ST.VM,
   CAST(DATEDIFF(DAY, MIN(ST.CreatedDate) OVER (PARTITION BY ST.VBLOCK, ST.VM), ST.CreatedDate) + 1 AS varchar(3)) AS KPI,
   ST.CPU AS CPU
FROM Sampletable ST
UNION
SELECT ST.VBLOCK, ST.VM,
   'Avg' AS KPI,
   AVG(ST.CPU) AS CPU
FROM Sampletable ST
GROUP BY ST.VBLOCK, ST.VM
UNION
SELECT ST.VBLOCK, ST.VM,
   'Max' AS KPI,
   MAX(ST.CPU) AS CPU
FROM Sampletable ST
GROUP BY ST.VBLOCK, ST.VM;
Thom~
Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
Larnu.uk
March 13, 2017 at 1:54 pm
The following code will work, so long as you only have 5 days per VM.
WITH cteDayNum AS (
 SELECT *
  , [DayNum] = ROW_NUMBER() OVER (PARTITION BY [VBLOCK], [VM] ORDER BY [CreatedDate])
 FROM [dbo].[Sampletable]
)
SELECT
  [VBLOCK]
 , [VM]
 , [CPU Average] = CAST(AVG(CPU /1.0) AS DECIMAL(3,1))
 , [CPU Max]  = MAX(CPU)
 , [Day 1]   = SUM(CASE [DayNum] WHEN 1 THEN [CPU] ELSE 0 END)
 , [Day 2]   = SUM(CASE [DayNum] WHEN 2 THEN [CPU] ELSE 0 END)
 , [Day 3]   = SUM(CASE [DayNum] WHEN 3 THEN [CPU] ELSE 0 END)
 , [Day 4]   = SUM(CASE [DayNum] WHEN 4 THEN [CPU] ELSE 0 END)
 , [Day 5]   = SUM(CASE [DayNum] WHEN 5 THEN [CPU] ELSE 0 END)
FROM cteDayNum
GROUP BY [VBLOCK], [VM]
Viewing 3 posts - 1 through 3 (of 3 total)
You must be logged in to reply to this topic. Login to reply