4

次の 3 つのテーブルがあるとします。

輸送する :

    ID                   
--------------------

    1                           
    2                            
    3

到着:

 shipID     Atime 
--------------------
     1       t1 
     1       t3

離れる:

 shipID     Ltime
--------------------
     1       t2
     1       t4

返すクエリが必要です:

  shipID   Atime   Ltime
------------------------------
    1       t1       null
    1      null       t2
    1       t3       null
    1      null       t4

ここで、t1>t2>t3>t4

この結果は に受け入れられます :

  shipID   Atime   Ltime
------------------------------
    1       t1       null
    1       t3       null
    1      null       t2
    1      null       t4
4

4 に答える 4

3

試す:

SELECT shipID, atime, null ltime from arrive
UNION ALL 
SELECT shipID, null atime, ltime from `leave`
order by coalesce(atime,ltime)

ここでSQLFiddle 。

于 2013-05-28T10:46:35.280 に答える
1

基本的に、1 つの列全体で並べ替えてから、もう 1 つの列で並べ替えるのではなく、インターリーブされた値で並べ替えたいと考えています。

--Dummy Tables
CREATE TABLE #ship (ID int)
CREATE TABLE #arrive (ID int, atime DateTime)
CREATE TABLE #leave (ID int, ltime DateTime)

--Dummy Data
INSERT INTO #ship (ID) values (1);
INSERT INTO #arrive (ID, atime) VALUES (1, '2013-05-29 00:00:00')
INSERT INTO #arrive (ID, atime) VALUES (1, '2013-05-29 12:00:00')
INSERT INTO #leave (ID, ltime) VALUES (1, '2013-05-29 06:00:00')
INSERT INTO #leave (ID, ltime) VALUES (1, '2013-05-29 18:00:00')


SELECT 
    i.ID,
    CASE WHEN i.label = 'l' then i.thetime else null end as atime,
    CASE WHEN i.label = 'a' then i.thetime else null end as ltime
FROM (
         SELECT 'l' as label,ID,atime as thetime FROM #arrive 
         UNION
         SELECT 'a' as label,ID,ltime as thetime FROM #leave 
     ) as i
ORDER BY i.thetime

--Cleanup
DROP TABLE #ship
DROP TABLE #arrive
DROP TABLE #leave

結果は.

ID          atime                   ltime
----------- ----------------------- -----------------------
1           2013-05-29 00:00:00.000 NULL
1           NULL                    2013-05-29 06:00:00.000
1           2013-05-29 12:00:00.000 NULL
1           NULL                    2013-05-29 18:00:00.000
于 2013-05-28T10:43:34.940 に答える
1

これを試して:

SELECT DISTINCT
  t1.shipid,
  a.atime,
  l.ltime
FROM
(
    SELECT shipID, atime AS time from arrive
    UNION ALL 
    SELECT shipID, ltime AS time from `leave`
) AS t1
LEFT JOIN arrive  AS a ON a.shipid = t1.shipid AND a.atime = t1.time
LEFT JOIN `leave` AS l ON l.shipid = t1.shipid AND l.ltime = t1.time

ここで実際にそれを見てください:

これにより、次のことが得られます。

| SHIPID |  ATIME |  LTIME |
----------------------------
|      1 |     t1 | (null) |
|      1 |     t3 | (null) |
|      1 | (null) |     t2 |
|      1 | (null) |     t4 |
于 2013-05-28T10:32:04.510 に答える
0

これを試してQuery

select * from
(select s.id as shipid,a.Atime as Atime,null as Ltime
from Ship s
inner join Arrival a on s.id=a.shipid
union
select s.id as shipid,null as Atime, l.Ltime as Ltime
from Ship s
left join Leave1 l on s.id=l.shipid)t
where t.Atime is not null
or t.Ltime is not null

SQL フィドル

于 2013-05-28T10:49:35.107 に答える