2011-07-15 6 views
-2

Я не могу понять это здесь мои структуры таблиц:TSQL - выбор данных для записи, если она не существует

период Таблица (годМесяц VARCHAR (6), weekOfMonth VARCHAR (1), fullDate дата)

Таблица данных (SKU VARCHAR (6), полученного ИНТ годМесяц VARCHAR (6), fullDate дата)

вот мои данные для периода:

yearMonth weekOfMonth fullDate 
------------------------------------------ 
201104  1  Apr 3 2011 12:00AM 
201104  1  Apr 4 2011 12:00AM 
201104  1  Apr 5 2011 12:00AM 
201104  1  Apr 6 2011 12:00AM 
201104  1  Apr 7 2011 12:00AM 
201104  1  Apr 8 2011 12:00AM 
201104  1  Apr 9 2011 12:00AM 
201104  2  Apr 10 2011 12:00AM 
201104  2  Apr 11 2011 12:00AM 
201104  2  Apr 12 2011 12:00AM 
201104  2  Apr 13 2011 12:00AM 
201104  2  Apr 14 2011 12:00AM 
201104  2  Apr 15 2011 12:00AM 
201104  2  Apr 16 2011 12:00AM 
201104  3  Apr 17 2011 12:00AM 
201104  3  Apr 18 2011 12:00AM 
201104  3  Apr 19 2011 12:00AM 
201104  3  Apr 20 2011 12:00AM 
201104  3  Apr 21 2011 12:00AM 
201104  3  Apr 22 2011 12:00AM 
201104  3  Apr 23 2011 12:00AM 
201104  4  Apr 24 2011 12:00AM 
201104  4  Apr 25 2011 12:00AM 
201104  4  Apr 26 2011 12:00AM 
201104  4  Apr 27 2011 12:00AM 
201104  4  Apr 28 2011 12:00AM 
201104  4  Apr 29 2011 12:00AM 
201104  4  Apr 30 2011 12:00AM 
201105  1  May 1 2011 12:00AM 
201105  1  May 2 2011 12:00AM 
201105  1  May 3 2011 12:00AM 
201105  1  May 4 2011 12:00AM 
201105  1  May 5 2011 12:00AM 
201105  1  May 6 2011 12:00AM 
201105  1  May 7 2011 12:00AM 
201105  2  May 8 2011 12:00AM 
201105  2  May 9 2011 12:00AM 
201105  2  May 10 2011 12:00AM 
201105  2  May 11 2011 12:00AM 
201105  2  May 12 2011 12:00AM 
201105  2  May 13 2011 12:00AM 
201105  2  May 14 2011 12:00AM 
201105  3  May 15 2011 12:00AM 
201105  3  May 16 2011 12:00AM 
201105  3  May 17 2011 12:00AM 
201105  3  May 18 2011 12:00AM 
201105  3  May 19 2011 12:00AM 
201105  3  May 20 2011 12:00AM 
201105  3  May 21 2011 12:00AM 
201105  4  May 22 2011 12:00AM 
201105  4  May 23 2011 12:00AM 
201105  4  May 24 2011 12:00AM 
201105  4  May 25 2011 12:00AM 
201105  4  May 26 2011 12:00AM 
201105  4  May 27 2011 12:00AM 
201105  4  May 28 2011 12:00AM 
201106  1  Jun 1 2011 12:00AM 
201106  1  Jun 2 2011 12:00AM 
201106  1  Jun 3 2011 12:00AM 
201106  1  Jun 4 2011 12:00AM 
201106  1  May 29 2011 12:00AM 
201106  1  May 30 2011 12:00AM 
201106  1  May 31 2011 12:00AM 
201106  2  Jun 5 2011 12:00AM 
201106  2  Jun 6 2011 12:00AM 
201106  2  Jun 7 2011 12:00AM 
201106  2  Jun 8 2011 12:00AM 
201106  2  Jun 9 2011 12:00AM 
201106  2  Jun 10 2011 12:00AM 
201106  2  Jun 11 2011 12:00AM 
201106  3  Jun 12 2011 12:00AM 
201106  3  Jun 13 2011 12:00AM 
201106  3  Jun 14 2011 12:00AM 
201106  3  Jun 15 2011 12:00AM 
201106  3  Jun 16 2011 12:00AM 
201106  3  Jun 17 2011 12:00AM 
201106  3  Jun 18 2011 12:00AM 
201106  4  Jun 19 2011 12:00AM 
201106  4  Jun 20 2011 12:00AM 
201106  4  Jun 21 2011 12:00AM 
201106  4  Jun 22 2011 12:00AM 
201106  4  Jun 23 2011 12:00AM 
201106  4  Jun 24 2011 12:00AM 
201106  4  Jun 25 2011 12:00AM 
201106  5  Jul 1 2011 12:00AM 
201106  5  Jul 2 2011 12:00AM 
201106  5  Jun 26 2011 12:00AM 
201106  5  Jun 27 2011 12:00AM 
201106  5  Jun 28 2011 12:00AM 
201106  5  Jun 29 2011 12:00AM 
201106  5  Jun 30 2011 12:00AM 

Это запрос, Я Пробовал:

SELECT DISTINCT a.SKU, SUM(a.received) AS Received 
a.yearMonth , p.weekOfMonth 
FROM data a 
RIGHT OUTER JOIN period p 
ON p.fullDate = a.fullDate 
WHERE p.yearMonth >= '201104' AND p.yearMonth < '201107' 
GROUP BY a.SKU, a.yearMonth , p.weekOfMonth 

Он не возвращается каждый годМонта и неделя этого месяца, если данных нет.

здесь данные в табличные данные:

sku received yearMonth fullDate 
--------------------------------------- 
AAAA 5  201106 Jun 23 2011 12:00AM 
BBBB 1  201106 Jun 10 2011 12:00AM 
BBBB 1  201106 Jun 15 2011 12:00AM 

вот мои данные, когда я Соединить 2 таблицы:

SKU received yearMonth weekOfMonth 
------------------------------------- 
AAAA 5  201106  4 
BBBB 1  201106  2 
BBBB 1  201106  3 

я хотел бы, чтобы отобразить либо NULL или 0 для полученной, если нет данные, например:

SKU received yearMonth weekOfMonth 
------------------------------------- 
AAAA 0  201104  1 
AAAA 0  201104  2 
AAAA 0  201104  3 
AAAA 0  201104  4 
AAAA 0  201105  1 
AAAA 0  201105  2 
AAAA 0  201105  3 
AAAA 0  201105  4 
AAAA 0  201106  1 
AAAA 0  201106  2 
AAAA 0  201106  3 
AAAA 5  201106  4 
AAAA 0  201106  5 

BBBB 0  201104  1 
BBBB 0  201104  2 
BBBB 0  201104  3 
BBBB 0  201104  4 
BBBB 0  201105  1 
BBBB 0  201105  2 
BBBB 0  201105  3 
BBBB 0  201105  4 
BBBB 0  201106  1 
BBBB 1  201106  2 
BBBB 1  201106  3 
BBBB 0  201106  4 
BBBB 0  201106  5 

Спасибо в продвинутом виде.

+0

А как насчет года? А какой тип данных «месяц»? символ (2)? – gbn

+0

Извините, я только что обновил его. Мне нужно изменить столбцы, потому что это для работы. – pqsk

+0

Мне любопытно, почему это было приостановлено ... – pqsk

ответ

1

СУММА() является устранение NULL результатов. Сообщение об исполнении: Предупреждение: значение Null исключается агрегированием или другой операцией SET.

UPDATE:
Это некрасиво, но это работает. Может потребоваться настройка, и кто-то, у кого больше опыта, сможет критиковать его.

ОБНОВЛЕНИЕ:
Я добавил отчетливую и удалили GROUP BY на вспомогательном запросе.


SELECT DISTINCT 
    subQ.SKU, 
    (
     SELECT SUM(d.Received) AS NumReceived 
     FROM data d 
      JOIN period p ON d.FullDate = p.FullDate 
     WHERE d.YearMonth = subQ.yearMonth 
      AND d.SKU = subQ.SKU 
      AND p.weekOfMonth = subQ.weekOfMonth 
     ) AS Received, 
    subQ.yearMonth, 
    subQ.weekOfMonth 
FROM (
     SELECT DISTINCT 
      d.SKU, 
      p.yearMonth, 
      p.weekOfMonth 
     FROM 
      period p, 
      data d 
    ) subQ 
ORDER BY 
    subQ.SKU 
+0

Это делает. Огромное спасибо. – pqsk

1

Если это не возвращает результаты, то должны быть записи отсутствуют с вашего периода таблицы: функция

SELECT DISTINCT 
    a.SKU, 
    SUM(a.received) AS Received 
    a.month, 
    p.weekOfMonth 
FROM 
    period p LEFT OUTER JOIN 
    data a ON a.fullDate = p.fullDate 
WHERE 
    p.month >= '04' AND p.month < '07' 
GROUP BY 
    a.SKU, 
    a.month, 
    p.weekOfMonth 
+0

Получаю те же результаты. В таблице периодов есть все данные. Я просто не понимаю, почему он не работает. – pqsk

+0

Что возвращается в этом случае? Нет записей, каких-то записей? –

+0

То же, что и выше, 3 записи AAAA BBBBB Я обновил свой вопрос. Я думаю, проблема в том, что это дата. на каждую неделю есть несколько дней. – pqsk

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