SSRS / SQL选择日期MAX问题

时间:2014-01-28 02:32:16

标签: sql reporting-services

您好我们有以下数据集来自SQL。

NAME, TYPE, DATE
ALICE, 1, 1/1/2001
ALICE, 1, 1/1/2002    
ALICE, 2, 1/1/2003
ALICE, 2, 1/1/2004
BOB,   1, 1/1/2005
BOB,   1, 1/1/2003

我们需要在SSRS tablix中显示该表,其中每个用户有一行,每个类型有一列显示最近的日期。所以

NAME,   MOST RECENT TYPE 1 DATE, MOST RECENT TYPE 2 DATE
ALICE,    1/1/2002,               1/1/2004
BOB  ,    1/1/2005,               NONE

我无法理解如何将MAX日期仅计算在TYPE 1或TYPE 2上,因为类型值在同一列中。

现在我有行grup来聚合所有alice和所有bob,但我不知道如何分离出两种不同类型的日期,所以我可以分别得到每种类型的MAX。

有什么建议吗?

感谢, MC

2 个答案:

答案 0 :(得分:2)

假设Sql Answer是可以接受的,您可以执行以下操作:

SELECT 
   ud.Name, 
   MAX(CASE ud.Type WHEN 1 THEN ud.SomeDate END) AsMostRecentType1,
   MAX(CASE ud.Type WHEN 2 THEN ud.SomeDate END) AsMostRecentType2
FROM
   UserDates ud
GROUP BY ud.Name;

Fiddle here

我抵制了在SQL中应用ISNULL(x, 'NONE')的诱惑,因为这会引起类型问题,IMO是表示层关注点,在您决定日期格式的同时应该applied in SSRS ,例如:

=IIf(IsNothing(Fields!AsMostRecentType1.Value), "NONE", 
     Fields!AsMostRecentType1.Value.ToString("D/M/YYYY"))

答案 1 :(得分:1)

我会在Type列上添加一个Column Group。然后,SSRS Max函数的默认范围(在详细信息单元格中)将是Name的Row Group和Type的Column Group的组合。