Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли написать такое запрос?  [new]
RSA86
Member

Откуда:
Сообщений: 80
Всем привет. Есть таблица с датами
Дата
2010-01-01
2010-02-01
2010-03-01
2010-04-01


И другая, в которой значения начинаются не с первого числа месяца:
Дата Объект1 Подразделение знач1 знач2 знач3
2010-03-01 Москва Первое 1 1 1
2010-04-01 Москва Первое 222


Как получить вот такую табличку:
ДатаОбъект1 Подразделение знач1 знач2 знач3
2010-01-01 Москва Первое000
2010-02-01 Москва Первое000
2010-03-01 Москва Первое 1 1 1
2010-04-01 Москва Первое 222
2 фев 12, 10:46    [12017236]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли написать такое запрос?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
[таблица с датами] LEFT JOIN [другая таблица]
2 фев 12, 10:49    [12017264]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли написать такое запрос?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5121
таблица "с датами" left join "другая" таблица + isnull(знач, 0)
2 фев 12, 10:50    [12017277]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли написать такое запрос?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
RSA86, я так понимаю комбинаций Объект1+Подразделение может быть много? И для всех их надобно дополнить пустым значением?
2 фев 12, 10:52    [12017290]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли написать такое запрос?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
kDnZP
RSA86, я так понимаю комбинаций Объект1+Подразделение может быть много? И для всех их надобно дополнить пустым значением?


DECLARE @Dt TABLE (dt DATETIME)
INSERT INTO @Dt(dt)
SELECT '20100101' UNION ALL SELECT
'20100201' UNION ALL SELECT
'20100301' UNION ALL SELECT
'20100401'

DECLARE @Data TABLE(dt DATETIME, Obj1 NVARCHAR(20), Depart NVARCHAR(20),Val1 INT, Val2 INT, Val3 INT)
INSERT INTO @Data(dt,
        Obj1,
        Depart,
        Val1,
        Val2,
        Val3)
SELECT '20100301', 'Москва', 'Первое', 1, 1, 1  UNION ALL SELECT
'20100401', 'Москва', 'Первое', 2, 2, 2 UNION ALL SELECT
'20100401', 'Москва', 'Второе', NULL, 1, 2 -- если допускаются NULL, тогда надобно через CASE, но писать лень, уж сами напишите

SELECT ISNULL(t3.dt, t2.dt) dt, ISNULL(t3.Obj1, t.Obj1) Obj1, ISNULL(t3.Depart, t.Depart) Depart,
ISNULL(t3.Val1,0) Val1, ISNULL(t3.Val2,0) Val2, ISNULL(t3.Val3,0) Val3
FROM (
SELECT  DISTINCT Obj1,
        Depart FROM @Data
) t CROSS JOIN @Dt t2
LEFT JOIN @Data t3 ON t3.Depart=t.Depart AND t3.Obj1=t.Obj1 AND t2.dt = t3.dt
2 фев 12, 11:08    [12017439]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить