如何将最右边的“上一步”列添加到SSRS中的报告中?基本上,我需要包含该行最新日期的列的名称。实际数据将是几千行,每行约有15个日期。
Name Step X Step W Step A Step B Step Y Last Step
-------------------------------------------------------------------------------
John 1/21/2013 1/24/2013 1/3/2013 1/27/2013 1/7/2013 Step B
Sally 1/22/2013 1/24/2013 1/12/2013 1/1/2013 1/5/2013 Step W
SQL Fiddle包含简单的示例数据。
答案 0 :(得分:1)
这是一种不使用动态sql的方法(因为这是用于报告服务):
SELECT T.*, C.ColName
FROM yourtable T
OUTER APPLY (SELECT TOP 1 *
FROM (SELECT 'Step X', [Step X]
UNION ALL
SELECT 'Step W', [Step W]
UNION ALL
SELECT 'Step A', [Step A]
UNION ALL
SELECT 'Step B', [Step B]
UNION ALL
SELECT 'Step Y', [Step Y]) X(ColName,ColValue)
ORDER BY ColValue DESC) C
答案 1 :(得分:1)
以下是通过修改first question中的查询来实现此目的的另一种方法。这只是将name
添加到结果中,因此您可以为每个名称获取max(date)
:
;with cte as
(
select name, col, value
from yourtable
unpivot
(
value
for col in ([Step X], [Step W], [Step A], [Step B], [Step Y])
) unpiv
)
select t.name,
[Step X],
[Step W],
[Step A],
[Step B],
[Step Y],
d.col LastStep
from yourtable t
cross apply
(
select c1.col
from cte c1
inner join
(
select name, max(value) MaxDate
from cte
group by name
) c2
on c1.value = c2.maxdate
and c1.name = c2.name
where t.name = c1.name
) d
答案 2 :(得分:0)
为了后人的缘故,这里是bluefeet对类似问题的回答的修改版本,the fiddle。
WITH cte AS (
SELECT *, Rank() OVER (PARTITION BY Name ORDER BY value DESC) AS Rank
FROM (
SELECT *
from yourtable
unpivot
(
value
for col in ([Step X], [Step W], [Step A], [Step B], [Step Y])
) unpiv
) X
)
SELECT yt.[Step X]
, yt.[Step W]
, yt.[Step A]
, yt.[Step B]
, yt.[Step Y]
, c1.col
FROM yourtable yt
JOIN cte c1
ON yt.Name = c1.Name
AND c1.Rank = 1