2016-08-03 12 views
0

このデータから次の結果を得るにはどうすればよいですか?SQL join with condition

(私が条件と接合まだいくつかの不要な行と結合しようとしています。)

入力だけで一つのテーブルにありますので、

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 
+0

同じIDの2つ以上があることはできますか? – gh9

+0

ありがとうございます。 1.データを正規化します(INのみ、OUTのみ、INとOUTを組み合わせたもの) 2. UNION ALLこれらの3つのビューを4時間表示に変換します –

答えて

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) 
0

以下に目的を果たすことができる: は1. IDを持つとINがヌルに等しくない場合INテーブルがある:

(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がヌルと等しくない場合:

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

O/Pは次のとおりです。

ID OUT 
2 16:30 
3 19:00 

3.Outerは、2つのテーブルを結合:

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