2013-10-28 3 views
0

У меня есть следующий код:Вычитание даты

SELECT t2.Owner, a.accNumber, a.Rest, dateadd(day,1,MIN(a.Date)), MIN(b.Date) 
    FROM t1 a 
    LEFT JOIN t1 b ON a.accNumber=b.accNumber 
    LEFT JOIN t1 ON a.accountId = t2.accountId 
    WHERE a.Date<b.Date 
    AND a.Rest<>0 
    AND a.accNumber=b.accNumber 
    GROUP BY a.accNumber, a.Rest, t2.Owner 
    ORDER BY t2.Owner 

Я хочу, чтобы вычитать даты в 5 и 4-й колонке (MIN(b.Date) - dateadd(day,1,MIN(a.Date))) и поместить его в 6-м столбце, но просто DATEDIFF(day, dateadd(day,1,MIN(a.Date)), MIN(b.Date)) не работает из-за ЛЕВЫЙ соединения.

enter image description here

Вот как это должно выглядеть. с текущим кодом, я могу видеть только первые 5 столбцов, я хочу видеть, 6-й столбец либо

enter image description here

Вот как это выглядит, когда я добавить DATEDIFF(day, 4, 5) в отборное заявление

+0

Где находится таблица t2? – Twinkles

+0

Итак, что бы вы хотели в столбце разницы дат, если нет значения b.date – Sparky

+0

t2 - это другая таблица, откуда я получаю «Владелец» –

ответ

0

Вы должны использовать ISNULL функцию SQL Server в этом случае, поскольку у вас есть NULL из-за LEFT JOIN.

Из Вашего вопроса не ясно, что вы хотите сделать, но она может быть использована таким образом:

ISNULL(MIN(a.Date), 0) 

или

MIN(ISNULL(a.Date, 0)) 

Ссылка: http://technet.microsoft.com/en-us/library/ms184325.aspx

0

Я не На 100% я понимаю проблему, но я могу дать вам решение на короткий срок. Это позволит вам продолжить разработку, и вы можете понять, что случилось позже.

Предполагая, что ваш опубликованный запрос работает правильно, как говорят ваши комментарии, вы можете просто рассматривать его как таблицу.

Ваш запрос

SELECT t2.Owner, a.accNumber, a.Rest, dateadd(day,1,MIN(a.Date)), MIN(b.Date) 
    FROM t1 a 
    LEFT JOIN t1 b ON a.accNumber=b.accNumber 
    LEFT JOIN t1 ON a.accountId = t2.accountId 
    WHERE a.Date<b.Date 
    AND a.Rest<>0 
    AND a.accNumber=b.accNumber 
    GROUP BY a.accNumber, a.Rest, t2.Owner 
    ORDER BY t2.Owner 

Имя колонны, и завернуть его в другой ЗЕЬЕСТ. Что-то в этом направлении должно работать.

SELECT Owner, accNumber, Rest, Good_name, Another_good_name, 
     Another_good_name - Good_name Yet_a_third_good_name 
FROM 
    (SELECT t2.Owner, a.accNumber, a.Rest, 
      dateadd(day,1,MIN(a.Date)) Good_name, MIN(b.Date) Another_good_name 
    FROM t1 a 
    LEFT JOIN t1 b ON a.accNumber=b.accNumber 
    LEFT JOIN t1 ON a.accountId = t2.accountId 
    WHERE a.Date<b.Date 
     AND a.Rest<>0 
     AND a.accNumber=b.accNumber 
    GROUP BY a.accNumber, a.Rest, t2.Owner 
    ORDER BY t2.Owner) AS Good_table_name 

Альтернативой является создание представления из вашего первого запроса и выбор из представления.

Поскольку в ваших примерах нет NULL, и вы не упоминаете их, я предполагаю, что вы знаете, как обращаться с NULL.

Смежные вопросы