2016-02-12 78 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) 
相關問題