2011-10-21 74 views
6

Chỉnh sửa: Sau khi thử phương pháp COALESCE, hiện tôi đang gặp sự cố khi dữ liệu lặp lại với cùng dữ liệu cho từng loại công suất. Cột 2 là công suất. enter image description herekết hợp hai cấu trúc bảng giống nhau với các dữ liệu khác nhau

Tôi đã tạo hai bảng tạm thời, cả hai đều có cùng cấu trúc bảng giống nhau. Trong các bảng này, có nhiều cột có thể có cùng giá trị và sau đó một vài cột giá trị sẽ có các số khác nhau. Một số trong số này sẽ là NULL trong một cột, và không phải là NULL trong một cột khác. Tôi muốn thu thập tất cả các giá trị cùng nhau và trên các hàng có cùng trang web và nhà máy, tôi muốn các giá trị được kết hợp.

Dưới đây là một ví dụ về những gì hai bảng có thể trông giống như và kết quả tôi mong đợi

table1:

SITE  PLANT   VALUE_1   VALUE 2 
S1  P1    54    66 
S1  P2    43    43 

BẢNG 2:

SITE  PLANT   VALUE_1   VALUE_2 
S1  P1   33    43 
S2  P1   34    22 

KẾT QUẢ:

SITE  PLANT   t1_VALUE_1 t1_VALUE_2 t2_VALUE_1  t2_VALUE2 
S1  P1   54   66   33    43 
S1  P2   43   43   NULL   NULL 
S2  P1   NULL   NULL   34    22 

Bản gốc của tôi suy nghĩ sẽ là một sự tham gia đầy đủ. Tuy nhiên, điều này không hoạt động bởi vì trong câu lệnh chọn của bạn, bạn phải chỉ rõ nơi lấy các cột từ, như trang web và nhà máy; nhưng để chọn cả t1.site và t2.site sẽ tạo ra hai cột. Điều gần nhất tôi nhận được là truy vấn dưới đây, tuy nhiên bất cứ lúc nào có kết quả trong S2 có một trang web và nhà máy không ở S1, bạn nhận được giá trị null cho S1 và S2.

SELECT t1.Site, t1.Plant, t1.Value_1, t1.Value_2, t2.Value_1, t2.Value_2 
FROM table1 t1 
FULL JOIN table2 t2 
ON t1.site = t2.site 
AND t1.plant = t2.plant 
+0

Không sử dụng đánh dấu HTML. Sử dụng biểu tượng "định dạng dưới dạng mã" để dán các bảng có dấu cách được giữ nguyên. –

+0

@Tom - S1 và S2 không được liệt kê dưới dạng cột hoặc bảng. Bạn đang thực sự đề cập đến điều gì? –

Trả lời

1

Bạn có thể sử dụng coalesce. Nó sẽ trả về giá trị không null đầu tiên từ các tham số.

SELECT coalesce(t1.Site, t2.Site) as Site, coalesce(t1.Plant, t2.Plant) as Plant, 
4

Hai thủ thuật là cần thiết để hoàn thành truy vấn này. Đầu tiên là FULL JOIN. Tham gia đầy đủ sẽ cho phép bạn kết hợp cả hai bảng và chèn các giá trị rỗng vào một trong hai bảng khi bạn không khớp với điều kiện kết nối. Thứ hai là COALESCE, cho phép bạn lấy nhà máy và trang web từ bất kỳ bảng nào cung cấp một bản ghi cho hàng này trong kết quả.

SELECT Coalesce(t1.Site,t2.Site) As Site, COALESCE(t1.Plant, t2.Plant) As Plant, 
    t1.Value_1 As t1_Value_1, t1.Value_2 As t1_Value_2, 
    t2.Value_1 As t2_Value_1, t2.Value_2 As t2_Value_2 
FROM Table1 t1 
FULL JOIN Table2 t2 ON t1.Site = t2.Site AND t1.Plant = t2.Plant 
+0

Cảm ơn bạn đã nhập liệu, tôi cần thông minh về chức năng kết hợp. Vui lòng xem câu hỏi được cập nhật – Tom

Các vấn đề liên quan