Sql Join для частично перекрывающихся данных - PullRequest
5 голосов
/ 06 февраля 2012

Я получаю данные из 3 таблиц (дата и количество), некоторые данные могут перекрываться, но не уверен, какие таблицы. Например, некоторые дни могут перекрываться в таблицы t1 и t2, но не в t3, или t2 и t3, но не в t1 или t1 и t3, но не в t2

Если я выполняю полное объединение, я получаю множество пустых значений и три разных столбца даты.

Как я могу получить данные для форматирования: date,qty1, qty2, gty3 где [date] будет содержать все дни из 3 таблиц? Ноль заменит все нулевые значения

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

1 Ответ

5 голосов
/ 06 февраля 2012
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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...