2016-02-12 19 views
-2

当前结果是我从我的存储过程中获得:如何让列在SQL Server中使用透视行的行数据和列数据2008 R2

enter image description here

从目前的结果预期的结果:

enter image description here

+1

我见过的链接只有答案,一个链接只问题是新的。请编辑你的问题来描述你的问题,描述你的模式,显示你的代码和样本数据 – HoneyBadger

+0

其实我不能..我的公司不会允许我分享任何东西..这就是为什么我创建了这个rouf的东西来描述问题 –

+0

哦,我大笑=)一张有要求的纸的照片,必须是SO中的第一张。 –

回答

0

试试这个..

联盟所有枢轴..

Demo Here

declare @table table 
(period nvarchar(10),num int,cost int,value int) 
insert into @table 
select 'Jan-16',1,100,100 
union all select 'Feb-16',2,200,200 
union all select 'Mar-16',3,300,300 
union all select 'Apr-16',4,400,400 
union all select 'May-16',5,500,500 
union all select 'Jun-16',6,600,600 
union all select 'Jul-16',7,700,700 
union all select 'Aug-16',8,800,800 
union all select 'Sep-16',9,900,900 
union all select 'Oct-16',10,1000,1000 
union all select 'Nov-16',11,1100,1100 
union all select 'Dec-16',12,1200,1200 


--select * from @table 

select 'No of Order' as Period,[Jan-16], [Feb-16],[Mar-16],[Apr-16],[May-16],[Jun-16],[Jul-16],[Aug-16],[Sep-16],[Oct-16],[Nov-16],[Dec-16] 
from 
(
select period,num from @table) u 
pivot (sum(num) for period in ([Jan-16] ,[Feb-16],[Mar-16],[Apr-16], [May-16], [Jun-16],[Jul-16],[Aug-16],[Sep-16],[Oct-16],[Nov-16], [Dec-16])) 
as pvt 

union all 
select 'Cost Of Order' as Period,[Jan-16], [Feb-16],[Mar-16],[Apr-16],[May-16],[Jun-16],[Jul-16],[Aug-16],[Sep-16],[Oct-16],[Nov-16],[Dec-16] 
from 
(
select period,cost from @table) u 
pivot (sum(Cost) for period in ([Jan-16] ,[Feb-16],[Mar-16],[Apr-16], [May-16], [Jun-16],[Jul-16],[Aug-16],[Sep-16],[Oct-16],[Nov-16], [Dec-16])) 
as pvt 

union all 
select 'Value Of Order' as Period,[Jan-16], [Feb-16],[Mar-16],[Apr-16],[May-16],[Jun-16],[Jul-16],[Aug-16],[Sep-16],[Oct-16],[Nov-16],[Dec-16] 
from 
(
select period,value from @table) u 
pivot (sum(value) for period in ([Jan-16] ,[Feb-16],[Mar-16],[Apr-16], [May-16], [Jun-16],[Jul-16],[Aug-16],[Sep-16],[Oct-16],[Nov-16], [Dec-16])) 
as pvt 
0
Select DaysToManufacture, AVG(StandardCost) As AverageCost 
From Production.Product 
Group by DaysToManufacture 


Here is the result set. 
DaysToManufacture   AverageCost 
0       5.0885 
1       223.88 
2       359.1082 
4       949.4105 

产品无三个DaysToManufacture定义。

以下代码显示了相同的结果,并进行了旋转,以便DaysToManufacture值成为列标题。即使结果为NULL,也会提供三天的列。

- 透视表一行五列

SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, 
[0], [1], [2], [3], [4] 
FROM 
(SELECT DaysToManufacture, StandardCost 
    FROM Production.Product) AS SourceTable 
PIVOT 
(
AVG(StandardCost) 
FOR DaysToManufacture IN ([0], [1], [2], [3], [4]) 
) AS PivotTable; 

下面是结果集。

Cost_Sorted_By_Production_Days 0   1   2   3  4  
AverageCost      5.0885 223.88 359.1082 NULL 949.4105 
4

You can perhaps do something like this? UNION ALL, case etc etc 的图像只能回答到图像只有问题!

+0

你是否做过任何与场景有关的查询..然后plz share –

+0

这是喜剧时间=) –

0

我的例子:

DECLARE 
@v_Columns VARCHAR(MAX), 
@v_StartDate DATETIME = '09/15/2015', 
@v_EndDate DATETIME = '12/15/2020', 
@v_Query VARCHAR(MAX) 

SELECT @v_Columns = COALESCE(@v_Columns,'[') + convert(varchar, Date, 101) + '],[' 
FROM 
(SELECT DISTINCT Date FROM view_wc_sessions_info) th 
WHERE 
th.Date BETWEEN @v_StartDate AND @v_EndDate 

SET @v_Columns = SUBSTRING(@v_Columns, 1, LEN(@v_Columns)-2) 

SET @v_Query = 

'SELECT 
* 
FROM 
(
select [Total], Date, fk_student_rcid 
    from view_WC_SESSIONS_Info th 
WHERE 
th.Date BETWEEN ''' + CONVERT(VARCHAR(50), @v_StartDate, 101) + ''' 
AND ''' + CONVERT(VARCHAR(50), @v_EndDate, 101) + ''' 
) src 
PIVOT 
(
COUNT(src.[Total]) 
FOR src.Date IN (' + @v_Columns + ') 
) AS pivotview' 

EXEC(@v_Query) 
相关问题