SQL连接与条件结合

时间:2016-08-03 17:49:01

标签: sql if-statement join conditional-statements

请如何从这些数据中获得以下结果?

(我正在尝试将条件与条件结合起来但仍有一些不需要的行。)

输入仅在一个表中:

ID    IN    OUT
-----------------
 1    6:00  null
 2    7:11  null
 2    null  16:30
 3    null  19:00

输出(视图)应该组合相同的ID,因此结果将如下所示:

ID    IN    OUT
------------------
1     6:00  null
2     7:11  16:30
3     null  19:00

2 个答案:

答案 0 :(得分:0)

您可以尝试使用CTE实现此目的:

CREATE TABLE #data
(
    Id int not null,
    inTime varchar(10) null,
    outTime varchar(10) null
)

 INSERT INTO #data VALUES 
  (1,    '6:00', null),
  (2 ,   '7:11', null),
  (2 ,   null, '16:30'),
  (3 ,   null, '19:00')


WITH combinedTable AS (
   SELECT
    Id,
    MAX(inTime) AS A,
    MAX(outTime) AS B
FROM #data
GROUP BY Id
HAVING MAX(2) = MIN(2)
    AND MAX(3) = MIN(3)
)
  SELECT *
  FROM combinedTable
  UNION ALL
  SELECT *
  FROM #data
  WHERE ID NOT IN (SELECT ID FROM combinedTable)

答案 1 :(得分:0)

以下内容可以达到目的: 1.有一个带ID和IN的表,其中IN不等于null:

(select ID, IN from table where In ne NULL()) as tableA

O / P将是:

ID    IN    
 1    6:00
 2    7:11

2.有一个带ID和OUT的表,其中OUT不等于null:

(select ID, OUT from table where OUT ne NULL()) as tableB

O / P将是:

ID   OUT
 2  16:30
 3  19:00

3.Outer加入两个表:

select tableA.ID,tableA.IN, tableB.OUT 
from table as tableA

outer full join

select ID,OUT from table as tableB
On tableA.ID=tableB.ID and tableA.IN ne Null() and tableB.OUT ne NULL()

输出将是所需的输出:

 ID    IN    OUT
1     6:00  null
2     7:11  16:30
3     null  19:00