2012-02-05 38 views
5

Tôi truy xuất biểu mẫu dữ liệu 3 bảng (ngày và qty), một số dữ liệu có thể trùng lặp nhưng không chắc chắn bảng nào. Ví dụ một số ngày có thể chồng chéo trong bảng t1 và t2 nhưng không phải trong t3, hoặc t2 và t3 nhưng không phải trong t1 hoặc t1 và t3 nhưng không phải trong t2Sql Tham gia dữ liệu chồng chéo một phần

Nếu tôi thực hiện một đầy đủ tham gia tôi kết thúc với rất nhiều của null và ba cột ngày khác nhau.

Làm cách nào để lấy dữ liệu định dạng: date,qty1, qty2, gty3 trong đó [date] sẽ chứa tất cả các ngày tạo thành 3 bảng? Zero sẽ thay thế tất cả các giá trị null

07/02/2012 || 2 || 0 || 7 


CREATE TABLE t1 (
    [date] [nvarchar](10) 
    ,qtyt1 [int] 
) 

CREATE TABLE t2 (
    [date] [nvarchar](10) 
    ,qtyt2 [int] 
) 

CREATE TABLE t3 (
    [date] [nvarchar](10) 
    ,qtyt3 [int] 
) 


insert into t1 values ('05/02/2012', 2) 
insert into t1 values ('07/02/2012', 3) 
insert into t2 values ('06/02/2012', 4) 
insert into t2 values ('08/02/2012', 5) 
insert into t3 values ('07/02/2012', 7) 
insert into t3 values ('08/02/2012', 11) 


select * from t1 
full join t2 on t1.date = t2.date 
full join t3 on t2.date = t3.date 

Trả lời

5
SELECT COALESCE(t1.date, t2.date, t3.date) AS date, 
     qtyt1, 
     qtyt2, 
     qtyt3 
FROM t1 
     FULL JOIN t2 
     ON t1.date = t2.date 
     FULL JOIN t3 
     ON ISNULL(t2.date, t1.date) = t3.date 
+0

Tò mò để trộn liên hiệp và ISNULL ... – ErikE

+0

@ErikE - True. Tôi mặc định là 'ISNULL' trừ khi có nhiều hơn 2 tham số hoặc một số lý do khác để thích' COALESCE'. –

+0

nó hoạt động, cảm ơn bạn – witpo

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