当前位置: 代码迷 >> Sql Server >> 求教-sql语句解决思路
  详细解决方案

求教-sql语句解决思路

热度:3   发布时间:2016-04-24 10:30:58.0
求教-sql语句

CREATE TABLE [dbo].[testtable](
[name] [nchar](10) NULL,
[time1] [datetime] NULL,
[time2] [datetime] NULL,
[time3] [datetime] NULL,
[time4] [datetime] NULL,
[time5] [datetime] NULL,
[time6] [datetime] NULL
) ON [PRIMARY]

INSERT INTO testtable VALUES('a1','2014-2-23 00:00:00','2014-2-23 01:00:00','2014-2-23 02:00:00','2014-2-23 03:00:00','2014-2-23 04:00:00','2014-2-23 05:00:00');
INSERT INTO testtable VALUES('a2','2014-2-24 00:00:00','2014-2-24 01:00:00','2014-2-24 02:00:00','2014-2-24 03:00:00','2014-2-24 04:00:00','2014-2-24 05:00:00');
INSERT INTO testtable VALUES('a3','2014-2-25 00:00:00','2014-2-25 01:00:00','2014-2-25 02:00:00','2014-2-25 03:00:00','2014-2-25 04:00:00','2014-2-25 05:00:00');
INSERT INTO testtable VALUES('a4','2014-2-26 00:00:00','2014-2-26 01:00:00','2014-2-26 02:00:00','2014-2-26 03:00:00','2014-2-26 04:00:00','2014-2-26 05:00:00');



需求是要查询每个人的三个时间(时间是要按升序排)。下面是我的方案,但是想优化,有没有最优效率的!我想到一种方案就是用case when,把那三条语句合成一条(三条语句:是指‘第一’‘第二’‘第三’),求实现


SELECT  name AS 名字,
        ( SELECT    jztime
          FROM      ( SELECT    ROW_NUMBER() OVER ( ORDER BY jztime ) AS number ,
                                jztime
                      FROM      ( SELECT    time1 jztime
                                  UNION
                                  SELECT    time2
                                  UNION
                                  SELECT    time3
                                  UNION
                                  SELECT    time4
                                  UNION
                                  SELECT    time5
                                  UNION
                                  SELECT    time6
                                ) jztimetable
                      WHERE     ISDATE(jztime) = 1
                    ) jztimeandnumbertable
          WHERE     number = 1
        ) AS 第一时间 ,
        ( SELECT    jztime
          FROM      ( SELECT    ROW_NUMBER() OVER ( ORDER BY jztime ) AS number ,
                                jztime
                      FROM      ( SELECT    time1 jztime
  相关解决方案