0

我有两个表,分别称为 RFS 和 RFS_History。

 RFS_id  | name 
 --------+--------
    12   |  xx
    14   |  yy
    15   |  zz

图 1:RFS 表

     RFS_id  |  gate | End    | start 
     --------+-------+--------+-------
        12   |  aa   | 19/02  | 20/03
        12   |  bb   | 30/01  | 12/08
        12   |  cc   | 30/01  | 12/08
        13   |  aa   | 30/01  | 12/08
        12   |  dd   | 30/01  | 12/08

图 2:RFS 历史

我的初始查询是一个 select * 查询,用于获取 FRSname ='xx' 的信息

SELECT * FROM RFS, RFSHistory 
WHERE RFSname="xx"  And RFShistory.RFS_ID=RFS.RFS_ID

结果是:

     RFS_id  |  gate | End    | start 
     --------+-------+--------+-------
        12   |  aa   | 19/02  | 19/01
        12   |  bb   | 12/04  | 12/02
        12   |  cc   | 20/03  | 12/03
        12   |  dd   | 30/09  | 12/08

图 3

但是我想得到如下格式的结果:

 RFS_id  | gate_aa | gate_bb | gate_cc | gate_dd
 ----------------------------------------------
    12   | 30 days  |  60dyas | 8days   | 18days

gate_aa是持续时间,它来自start - end date. 请帮助我编写单个查询以获得此结果。

4

3 回答 3

0

用于datediff()获取日期差异Pivot()并将行转换为 cloumn 就像在您的案例门明智列中一样

示例语法

SELECT DATEDIFF(day,'2008-06-05','2008-08-05') AS DiffDate
于 2013-02-22T10:09:15.957 回答
0

您可以使用以下查询获取不同的黑白日期

SELECT RFS.ID,(RFS_HISTORY.end_t-RFS_HISTORY.start_t) AS DiffDate,gate FROM RFS, RFS_HISTORY WHERE name='aa' And RFS_HISTORY.ID=RFS.ID group by RFS.ID,gate,RFS_HISTORY.end_t,RFS_HISTORY。开始时间

于 2013-02-22T11:09:30.257 回答
0

我认为您想将行转换为值的列。这可以在旋转的帮助下完成。

SELECT * FROM RFS, RFSHistory
pivot  for columname on [values]

我实际上忘记了语法,但你可以谷歌

于 2013-02-22T13:07:52.773 回答