Link to home
Start Free TrialLog in
Avatar of k1ng87
k1ng87

asked on

pivot syntax

can anyone help me with this syntax...i get this error at line 5

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ','.
select *
from ttg_monthly_revenue_vw
pivot
(
	sum([sales]),
	sum([cogs]),
	sum([trans billing amt]) 
	for [month] in (
					[JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC]
					) PVTTBL

Open in new window

Avatar of ralmada
ralmada
Flag of Canada image

something like this?

select 	max([JAN]) as [Jan],
	max([JAN_cogs]) as [Jan_cogs],
	max([JAN_tba]) as [JAN_tba],
	... and so on...
from (
	select 	sales, 
		[cogs], 
		[trans billing amt], 
		[month], 
		[month] + '_cogs' as [month_cogs], 
		[month] + '_tba' as [month_tba]
	from ttg_monthly_revenue_vw
) o
pivot(sum([sales]) for [month] in ([JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC]) PVTTBL
pivot(sum([cogs]) for [month_cogs] in ([JAN_cogs],[FEB_cogs],[MAR_cogs],[APR_cogs],[MAY_cogs],[JUN_cogs],[JUL_cogs],[AUG_cogs],[SEP_cogs],[OCT_cogs],[NOV_cogs],[DEC_cogs]) PVTTBL1
pivot(sum([trans billing amt]) for [month_tba] in ([JAN_tba],[FEB_tba],[MAR_tba],[APR_tba],[MAY_tba],[JUN_tba],[JUL_tba],[AUG_tba],[SEP_tba],[OCT_tba],[NOV_tba],[DEC_tba]) PVTTBL2

Open in new window

Avatar of GaneshSP
GaneshSP

Can you tell me the table structure,values and what is the data you want?
Avatar of k1ng87

ASKER

My table structure is the following:

 [TRANS].[dbo].[ttg_ssrs_reporting_metrics_vw]
           ([segment]
           ,[group]
           ,[division]
           ,[division_city]
           ,[inv_year_id]
           ,[inv_month_id]
           ,[TransCost]
           ,[Sales]
           ,[COGS]
           ,[trans billing amt])
 
I would like to pivot the table to the following:

Segment | group | Division | division_city | Inv_year_ID | Entry_Type | Jan | Feb | Mar | Apr | May | etc...
--------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                            transcost
                                                                                            COGS
                                                                                            transbillingAmt
                                                                                            Sales
In that case you first need to unpivot and then pivot
See the below:

select 	[segment]
	,[group]
	,[division]
        ,[division_city]
	,[inv_year_id]
	,Entry_type
	,[JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC]
from 					
(
	select      a.[segment]
        	   ,a.[group]
	           ,a.[division]
        	   ,a.[division_city]
	           ,a.[inv_year_id]
        	   ,a.[inv_month_id]
		   ,up.Entry_type
        	   ,up.Amount
	from ttg_ssrs_reporting_metrics_vw a
	unpivot (amount for Entry_type in (Transcost, Sales, COGCS, [trans billing amt])) up
) o
pivot (sum(Amount) for inv_month_id in ([JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC])) p

Open in new window

same query, a bit more tidy:

select	[segment]
	,[group]
	,[division]
	,[division_city]
	,[inv_year_id]
	,Entry_type
	,[JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC]
from 					
(
	select	a.[segment]
		,a.[group]
		,a.[division]
		,a.[division_city]
		,a.[inv_year_id]
		,a.[inv_month_id]
		,up.Entry_type
		,up.Amount
	from ttg_ssrs_reporting_metrics_vw a
	unpivot (amount for Entry_type in (Transcost, Sales, COGCS, [trans billing amt])) up
) o
pivot (sum(Amount) for inv_month_id in ([JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC])) p

Open in new window

Avatar of k1ng87

ASKER

getting this error:

Msg 8167, Level 16, State 1, Line 1
The type of column "Sales" conflicts with the type of other columns specified in the UNPIVOT list.
Msg 207, Level 16, State 1, Line 19
Invalid column name 'COGCS'.
Msg 4104, Level 16, State 1, Line 19
The multi-part identifier "a.segment" could not be bound.
Msg 4104, Level 16, State 1, Line 19
The multi-part identifier "a.group" could not be bound.
Msg 4104, Level 16, State 1, Line 19
The multi-part identifier "a.division" could not be bound.
Msg 4104, Level 16, State 1, Line 19
The multi-part identifier "a.division_city" could not be bound.
Msg 4104, Level 16, State 1, Line 19
The multi-part identifier "a.inv_year_id" could not be bound.
Msg 4104, Level 16, State 1, Line 19
The multi-part identifier "a.inv_month_id" could not be bound.
ok, check this now:
select	[segment]
	,[group]
	,[division]
	,[division_city]
	,[inv_year_id]
	,Entry_type
	,[JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC]
from 					
(
	select	[segment]
		,[group]
		,[division]
		,[division_city]
		,[inv_year_id]
		,[inv_month_id]
		,up.Entry_type
		,up.Amount
	from (
		select 	segment, group, division, division_city,inv_year_id, inv_month_id,
			convert(sql_variant, Transcost) as Transcost,
			convert(sql_variant, Sales) as Sales,
			convert(sql_variant, COGCS) as COGCs,
			convert(sql_variant, [trans billing amt]) as [trans billing amt]
		from ttg_ssrs_reporting_metrics_vw
	) a
	unpivot (amount for Entry_type in (Transcost, Sales, COGCS, [trans billing amt])) up
) o
pivot (sum(Amount) for inv_month_id in ([JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC])) p

Open in new window

Avatar of k1ng87

ASKER

now getting this error...we're getting closer!! hahaha


Msg 8117, Level 16, State 1, Line 1
Operand data type sql_variant is invalid for sum operator.
Avatar of k1ng87

ASKER

if I remove the sql_variant conversion in line 20-23 I get this error then:


Msg 8167, Level 16, State 1, Line 1
The type of column "Sales" conflicts with the type of other columns specified in the UNPIVOT list.
ASKER CERTIFIED SOLUTION
Avatar of ralmada
ralmada
Flag of Canada image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial