SQL Server 2000查询最大日期的总值和值

qui*_*kxi 3 sql sql-server sql-server-2000

我有这个RoomTable有价值

SID   Room   Date        APhase   BPhase   ACount  BCount
1     One    10/28/2012  4        5         3       6
2     One    10/29/2012  2        3        -1      -1
3     One    10/30/2012  4        5         7      -1
4     Two    10/28/2012  8        3         2       3
5     Two    10/30/2012  3        5         4       6
6     Three  10/29/2012  5        8         2      -1
7     Three  10/30/2012  5        6        -1       4
8     Four   10/29/2012  6        2        -1      -1
9     Four   10/30/2012  5        8        -1      -1
Run Code Online (Sandbox Code Playgroud)

我想要的是返回以下内容:

  1. 每个房间的APhase和BPhase的总和.
  2. 每个房间最大日期的ACount和BCount的价值
  3. 如果ACount值为-1,则使用上一个日期.与BCount相同.
  4. 如果ACount值为-1,前一个日期为-1,依此类推.然后使用0.与BCount相同.

我可以使用此查询获得数字1的查询

SELECT Room, sum(APhase) as TotalAPhase, sum(BPhase) as TotalBPhase 
FROM RoomTable 
WHERE Date between '10/28/2012' and '10/30/2012'
group by Room
order by Room
Run Code Online (Sandbox Code Playgroud)

但我对如何包含2-4号查询感到困惑.

这是我想要的输出

Room  TotalAPhase  TotalBPhase  ACount   BCount
One   10           13           7        6
Two   11           8            4        6
Three 10           13           2        4
Four  11           10           0        0
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激.谢谢.

小智 5

希望这适用于您的情况:

SELECT 
Room
,SUM(APhase) AS TotalAPhase
,SUM(BPhase) AS TotalBPhase 
,ISNULL((    SELECT TOP 1 RT1.ACount 
             FROM RoomTable RT1 
             WHERE RT1.Room = RT.Room 
                AND RT1.ACount != -1
             ORDER BY RT1.Date DESC
), 0) AS ACount
,ISNULL((   SELECT TOP 1 RT2.BCount 
            FROM RoomTable RT2
            WHERE RT2.Room = RT.Room 
               AND RT2.BCount != -1
            ORDER BY RT2.Date DESC
), 0) AS BCount

FROM RoomTable RT
--WHERE Date between '10/28/2012' and '10/30/2012'
GROUP BY Room
ORDER BY Room
Run Code Online (Sandbox Code Playgroud)

我不确定你是否真的需要where子句,所以我评论了它.在结果表中,RoomB的TotalBPhase值应该是14,从这个SQL Fiddle演示中可以看出.