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

Откуда:
Сообщений: 89
Есть таблица Goroda к примеру:

name_gorod
-----------
Москва
Питер
Оренбург
Краснодар

Необходимо объединить эту таблицу со списком дат в интервале дат с 01.01.2014 по 31.01.2014, чтобы получилось так
Date name_gorod
------------------------
01.01.2014 Москва
01.01.2014 Питер
01.01.2014 Оренбург
01.01.2014 Краснодар
02.01.2014 Москва
02.01.2014 Питер
02.01.2014 Оренбург
02.01.2014 Краснодар
03.01.2014 Москва
03.01.2014 Питер
03.01.2014 Оренбург
03.01.2014 Краснодар

...........................

31.01.2014 Москва
31.01.2014 Питер
31.01.2014 Оренбург
31.01.2014 Краснодар

Таблица со списком городов есть к примеру Goroda, а вот даты нужно генерировать в selecte.
Есть только заданный интервал дат с 01.01.2014 по 31.01.2014.
22 янв 14, 18:51    [15453683]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Glory
Member

Откуда:
Сообщений: 104751
skais
а вот даты нужно генерировать в selecte.
Есть только заданный интервал дат с 01.01.2014 по 31.01.2014.

Ну так генерируйте, в чем проблема то ?
22 янв 14, 19:04    [15453735]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
SERG1257
Member

Откуда:
Сообщений: 2880
skais
а вот даты нужно генерировать в selecte.
Опыт подсказывает, что хотя даты можно генерировать в селекте, таблица Календарь (по сути материализованный результат генерации) оказывается маленькой и полезной
22 янв 14, 19:50    [15453917]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
skais
Member

Откуда:
Сообщений: 89
Знал бы как, не писал бы. Отдельно генерировать даты я нашел примеры. а вот как их сгенерировать и сразу объединить не знаю.
22 янв 14, 22:29    [15454340]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
skais
Member

Откуда:
Сообщений: 89
Дело в том, что ХП я не могу здесь воспользоваться, это нужно получить select-ом.
22 янв 14, 22:33    [15454351]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
SERG1257
Member

Откуда:
Сообщений: 2880
select top 31 row_number() over (order by (select 1)) from some_big_table_or_cross_join

Как из натурального ряда чисел дату делать сами догадаетесь
22 янв 14, 23:04    [15454475]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Glory
Member

Откуда:
Сообщений: 104751
skais
Дело в том, что ХП я не могу здесь воспользоваться, это нужно получить select-ом

Зато можете использовать табличную функцию.
22 янв 14, 23:48    [15454581]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Добрый Э - Эх
Guest
skais,

Если именно генерировать, то рекурсивный CTE тебе в помощь.
23 янв 14, 04:48    [15454813]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Jaffar
Member

Откуда:
Сообщений: 633
SERG1257,

кажись в 2012 - была какая-то системная виюха или TF для генерации последовательности чисел.
23 янв 14, 08:44    [15454943]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
prog882
Guest
skais,

DECLARE @T_CITY TABLE (F_ID INT IDENTITY, F_CITY VARCHAR(100))
INSERT INTO @T_CITY
	SELECT
		'Москва' UNION ALL SELECT
		'Питер' UNION ALL SELECT
		'Оренбург' UNION ALL SELECT
		'Краснодар'

;
WITH CTE AS (
SELECT
	CONVERT(DATE, '2014-01-01') AS F_DATE UNION ALL SELECT
	DATEADD(DAY, 1, F_DATE) AS F_DATE
FROM CTE
WHERE DATEADD(DAY, 1, F_DATE) <= '2014-01-31'),
	LST
	AS (SELECT
			F_DATE,
			ROW_NUMBER() OVER (ORDER BY F_DATE)	AS ROWNO
		FROM CTE)
SELECT
	F_CITY,
	F_DATE
FROM @T_CITY T
JOIN (SELECT
	CASE ROWNO % 4
		WHEN 0 THEN 4
		ELSE ROWNO % 4
	END	AS ROWNO,
	F_DATE
FROM LST) L
	ON T.F_ID = L.ROWNO
23 янв 14, 09:17    [15455025]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
skais
Member

Откуда:
Сообщений: 89
prog882,
не работает ни на MS
Server: Msg 156, Level 15, State 1, Line 11
Incorrect syntax near the keyword 'WITH'.
Server: Msg 170, Level 15, State 1, Line 16
Line 16: Incorrect syntax near ','.
Server: Msg 195, Level 15, State 1, Line 20
'ROW_NUMBER' is not a recognized function name.

ни на ORACLE
PLS-00103

А вообще мне нужно на ORACLE ,без ХП
23 янв 14, 11:46    [15455727]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Glory
Member

Откуда:
Сообщений: 104751
skais
А вообще мне нужно на ORACLE

Лучше всего вопросы по Ораклу задавать на каком нибудь форуме по кулинарии.
23 янв 14, 11:47    [15455745]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Добрый Э - Эх
Guest
хм. когда первый раз сообщение потерлось - думал случайность. Когда второй раз - совпадение.
Напишу третий раз. Если исчезнет - значит закономерность...

З.Ы.
Удаляющему сообщения - хотя бы причину этого озвучь на почту: saler3@yandex.ru
23 янв 14, 12:09    [15455928]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Glory
Member

Откуда:
Сообщений: 104751
Добрый Э - Эх
Удаляющему сообщения

По Ораклу есть куча своих форумов.
Незачем здесь постить решения для всех и вся
23 янв 14, 12:13    [15455954]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Добрый Э - Эх
Guest
Glory,

если так коробит, то чего бы тогда полностью на перенести топик в оракловую ветку?

З.Ы.
А если в ответе был бы не код, а ссылка на некий сайт с кодом - пошёл бы проверять что там по ссылке? И стал бы удалять ответ в случае, если ин-фа по ссылке не относится к MS SQL Server-у??? Я к тому спрашиваю, чтобы знать как отвечать в будущем на подобные не по адресу заданные вопросы... Ибо отвечать "в корзину" тоже как-то не сильно интересно.
23 янв 14, 12:20    [15456006]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Glory
Member

Откуда:
Сообщений: 104751
Добрый Э - Эх
если так коробит, то чего бы тогда полностью на перенести топик в оракловую ветку?

Версию сервера нужно было указывать сначала.
А теперь ТС не рассыпется, если напишет свой вопрос еще раз в нужном форуме. Надеюсь он умеет пользоваться копи-пейст.

Добрый Э - Эх
А если в ответе был бы не код, а ссылка на некий сайт с кодом - пошёл бы проверять что там по ссылке? И стал бы удалять ответ в случае, если ин-фа по ссылке не относится к MS SQL Server-у??? Я к тому спрашиваю, чтобы знать как отвечать в будущем на подобные не по адресу заданные вопросы... Ибо отвечать "в корзину" тоже как-то не сильно интересно.

Ссылка - пофиг. Ссылка не будет выдаваться, когда при поиске решения для MSSQL вдруг вылезит решение для Оракла
23 янв 14, 12:25    [15456053]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Добрый Э - Эх
Guest
Glory
Ссылка - пофиг.
И на том спасибо...

2 ТС тогда ссылко...
23 янв 14, 12:33    [15456121]     Ответить | Цитировать Сообщить модератору
 Re: Список дат объеденить с таблицой в select  [new]
Добрый Э - Эх
Guest
[quot prog882]
Не взлетит. Во-первых MOD, а не %. Во-вторых, рекурсивный WITH должен содержать список псевдонимов в своем определении. В третьих - почитай про cross join, чем изобретать велосипеды на декодированных джойнах:)
23 янв 14, 12:44    [15456224]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить