2015-05-22 83 views
4

我一直在尋找如何做這些工作幾天 - 不幸的是我沒有太多的SQL查詢經驗,所以這是一個試驗和錯誤。加入兩個表 - 一個具有不同值的常見列

基本上,我創建了兩個表格 - 都帶有一個DateTime列和一個不同的列,其中的值爲。 DateTime列在每個表中具有不同的值。

所以......

ACOQ1 (Table 1) 
 
=============== 
 

 
| DateTime | ACOQ1_Pump_Running | 
 
|----------+--------------------| 
 
| 7:14:12 |   1   | 
 
| 8:09:03 |   1   |

ACOQ2 (Table 2) 
 
=============== 
 

 
| DateTime | ACOQ2_Pump_Running | 
 
|----------+--------------------| 
 
| 3:54:20 |   1   | 
 
| 7:32:57 |   1   |

我想這兩個表結合起來,看起來就像這樣:

| DateTime | ACOQ1_Pump_Running | ACOQ2_Pump_Running | 
 
|----------+--------------------+--------------------| 
 
| 3:54:20 |  0 OR NULL  |   1   | 
 
| 7:14:12 |   1   |  0 OR NULL  | 
 
| 7:32:57 |  0 OR NULL  |   1   | 
 
| 8:09:03 |   1   |  0 OR NULL  |

我已經通過創建第三個表「UNION的兩個表,然後將DateTime列使用了第三個表的日期時間列的新表,但不知道是否有跳過這個方式來實現這走出去。 (最終,我將從不同的表中添加越來越多的列,並且不希望通過創建可能不必要的聯合DateTime表添加更多的處理時間)。此刻

我的工作代碼:

CREATE TABLE JointDateTime 
 
(
 
DateTime CHAR(50) 
 
CONSTRAINT [pk_Key3] PRIMARY KEY (DateTime) 
 
); 
 

 
INSERT INTO JointDateTime (DateTime) 
 
SELECT ACOQ1.DateTime FROM ACOQ1 
 
UNION 
 
SELECT ACOQ2.DateTime FROM ACOQ2 
 

 
SELECT JointDateTime.DateTime, ACOQ1.ACOQ1_NO_1_PUMP_RUNNING, ACOQ2.ACOQ2_NO_1_PUMP_RUNNING 
 
FROM (SELECT ACOQ1.DateTime FROM ACOQ1 
 
     UNION 
 
     SELECT ACOQ2.DateTime FROM ACOQ2) JointDateTime 
 
LEFT OUTER JOIN ACOQ1 
 
    ON JointDateTime.DateTime = ACOQ1.DateTime 
 
LEFT OUTER JOIN ACOQ2 
 
    ON JointDateTime.DateTime = ACOQ2.DateTime

+1

不要使用'CHAR'來存儲日期 – ughai

+0

我應該用什麼來代替?它目前將其存儲爲2015年5月11日07:14:12所以可能仍然需要這種格式。 – chrisj91

+0

使用'datetime',並使用'convert'或'format'。你使用的是哪個版本的sql server? – ughai

回答

4

你需要一個普通的老FULL OUTER JOIN這樣。

SELECT COALESCE(A1.DateTime,A2.DateTime) DateTime,ACOQ1_Pump_Running, ACOQ2_Pump_Running 
FROM ACOQ1 A1 
FULL OUTER JOIN ACOQ2 A2 
    ON A1.DateTime = A2.DateTime 

這會給你NULLACOQ1_Pump_RunningACOQ2_Pump_Running對不匹配相應的表的日期行。如果您需要0只需使用COALESCEISNULL

邊注::在您的腳本中,我可以看到您正在使用DateTime CHAR(50)。請使用appropriate types

+0

只是嘗試和像魅力一樣工作。非常感謝 - 現在看起來很簡單,但問題是我仍然在學習SQL的知識,所以並不總是知道最好的方式去做事情! – chrisj91

+0

再次感謝您的快速答案 - 我使用的SQL Server企業管理器版本8.00.2039的方式 – chrisj91

+0

SQL Server 2000 – chrisj91

相關問題