我想顯示數據,如透視網格。我現在正在顯示如下數據。請看下面的圖片或點擊鏈接。 http://screencast.com/t/CWeGy0vi 顯示網格中的樞軸或任何其他控件的數據
但我想以上的數據,如下列: http://screencast.com/t/ZTb2wk4cdmB
任何建議如何實現這一目標。初始點。我應該使用中繼器嗎?
我想顯示數據,如透視網格。我現在正在顯示如下數據。請看下面的圖片或點擊鏈接。 http://screencast.com/t/CWeGy0vi 顯示網格中的樞軸或任何其他控件的數據
但我想以上的數據,如下列: http://screencast.com/t/ZTb2wk4cdmB
任何建議如何實現這一目標。初始點。我應該使用中繼器嗎?
沒有看到你的表格結構等,很難給出確切的答案。但我可以建議你如何在SQL中執行此操作。你有一些以前的問題用sql server標記,所以我猜測。
;with unpiv as
(
select activity,
work,
Location+'_'+col as col,
value
from
(
select activity,
work,
cast(AssignedTasks as varchar(50)) AssignedTasks,
cast(CompletedTasks as varchar(50)) AchievedTasks,
Location
from yourtable
) src
unpivot
(
value
for col in (AssignedTasks, AchievedTasks)
) unpiv
),
piv as
(
select Activity,
work,
London_AssignedTasks,
London_AchievedTasks,
Geneva_AssignedTasks,
Geneva_AchievedTasks,
row_number() over(partition by activity order by activity, work) rn
from unpiv
pivot
(
max(value)
for col in (London_AssignedTasks, London_AchievedTasks,
Geneva_AssignedTasks, Geneva_AchievedTasks)
) piv
)
select case when rn = 1 then activity else '' end activity,
work,
London_AssignedTasks,
London_AchievedTasks,
Geneva_AssignedTasks,
Geneva_AchievedTasks
from piv
您可以同時使用UNPIVOT
和PIVOT
做到這一點。
結果是:
| ACTIVITY | WORK | LONDON_ASSIGNEDTASKS | LONDON_ACHIEVEDTASKS | GENEVA_ASSIGNEDTASKS | GENEVA_ACHIEVEDTASKS |
-------------------------------------------------------------------------------------------------------------------
| Activity 1 | Task 1 | 10 | 8 | 1 | 1 |
| | Task 2 | 15 | 15 | 100 | 25 |
| Activity 2 | Task 1 | 5 | 5 | 0 | 0 |
| | Task 2 | 0 | 0 | 2 | 2 |
| Activity 3 | Task 1 | 10 | 10 | 50 | 40 |
編輯#1,如果你有一個未知的或動態數量的Locations
那麼你可以使用動態SQL返回結果:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Location+'_'+t.tasks)
from yourtable
cross apply
(
select 'AssignedTasks' tasks
union all
select 'AchievedTasks'
) t
group by location, tasks
order by location
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = ';with unpiv as
(
select activity,
work,
Location+''_''+col as col,
value
from
(
select activity,
work,
cast(AssignedTasks as varchar(50)) AssignedTasks,
cast(CompletedTasks as varchar(50)) AchievedTasks,
Location
from yourtable
) src
unpivot
(
value
for col in (AssignedTasks, AchievedTasks)
) unpiv
),
piv as
(
select Activity,
work,
row_number() over(partition by activity order by activity, work) rn,
'[email protected]+'
from unpiv
pivot
(
max(value)
for col in ('[email protected]+')
) piv
)
select case when rn = 1 then activity else '''' end activity,
work,
'[email protected]+'
from piv'
execute(@query)
你如何返回數據?你想在SQL中完成嗎? – Taryn
@bluefeet SQL也很好。 – Kashif