2017-03-19 8 views
1

私は2つのテーブルデータをすべて一緒に結合したい場合は、各テーブルの行の日付は1より少なくなります 例:テーブルAには8行の日付がありますが、異なる.Iは私の結果は10行としてSQLサーバーでフル結合を使用

として

テーブル

RN USERID ClockIn CHECKTIME badgenumber 
1 6  8:24AM 2017-03-02 107 
1 6  7:57AM 2017-03-03 107 
1 6  8:23AM 2017-03-06 107 
1 6  8:26AM 2017-03-07 107 
1 6  8:57AM 2017-03-08 107 
1 6  8:33AM 2017-03-09 107 
1 6  8:36AM 2017-03-10 107 
1 6  8:15AM 2017-03-13 107 

テーブルB

RN USERID ClockOut CHECKTIME badgenumber 
1 6  9:31PM  2017-03-01 107 
1 6  10:28PM  2017-03-02 107 
1 6  8:22PM  2017-03-03 107 
1 6  9:18PM  2017-03-06 107 
1 6  9:48PM  2017-03-07 107 
1 6  9:11PM  2017-03-08 107 
1 6  11:31PM  2017-03-09 107 
1 6  6:30PM  2017-03-10 107 

私の結果のショーを示して欲しいです

SELECT #clockin.ClockIn, #clockOut.ClockOut,#clockin.USERID,#clockin.CHECKTIME 
FROM #clockin 
FULL JOIN #clockOut 
ON #clockin.CHECKTIME=#clockOut.CHECKTIME 
where #clockin.userid = 6 and #clockOut.userid = 6 
ORDER BY #clockin.userid; 

<!DOCTYPE html> 
 
     <html> 
 
     <body> 
 
    
 
     <h2>result</h2> 
 
     <img src="https://i.stack.imgur.com/IcdSS.png" alt="result" > 
 
    
 
     </body> 
 
     </html>

答えて

0

のでごwhere句の、あなたは(一致がない場合)x.useridnullある行を除外しています。これにより基本的にfull joininner joinに変わります。あなたは二つの列から最初の非null値を返すので、同じよう6にそれを比較することcoalesce()を使用することができます。

SELECT #clockin.ClockIn, #clockOut.ClockOut,#clockin.USERID,#clockin.CHECKTIME 
FROM #clockin 
    FULL JOIN #clockOut 
    ON #clockin.CHECKTIME=#clockOut.CHECKTIME 
where coalesce(#clockin.userid,#clockOut.userid)=6 
ORDER BY #clockin.userid; 
+0

結果多くのヌル行を表示 –

+0

@ShanweiLim – SqlZim

0
SELECT ClockIn, ClockOut, 
     ISNULL(ci.USERID, co.USERID) AS USERID, 
     CONVERT(VARCHAR(10), ISNULL(ci.CHECKTIME, co.CHECKTIME), 101) AS CHECKTIME 
FROM #ClockIn AS ci 
FULL JOIN #ClockOut AS co ON (co.CHECKTIME = ci.CHECKTIME); 

これはサンプルデータのためのあなたの所望の出力を与える必要があります。ただし、JNINフィルタにRN、USERIDなどを追加することを検討する必要があります。

ISNULL()は、ClockInのNULL idをClockOutのIDで置き換えます。

+0

他のローの例badgenumberとuseridがあれば教えてください。 – Shiblu

関連する問題