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

Откуда:
Сообщений: 48
Дня доброго, гениальные люди и рядовые программисты :)
Есть задача:
надо добавить в табличку все возможные сочетания для записей: День недели и промежутки времени.
Объясню наглядней.
Есть промежутки времени по 15 минут каждый. Например: 08:00-08:15, 08:15-08:30 и т.д. вплоть до 22:00.
Надо одним запросом получить табличку, в которой будет так:
[День недели], [Время]
Понедельник, 08:00-08:15
Понедельник, 08:15-08:30
...
Понедельник, 21:45-22:00
Вторник, 08:00-08:15
Вторник, 08:15-08:30
...
Вторник, 21:45-22:00

и т.д. вплоть до Воскресенья.

Есть запрос:
select d.ДеньНедели
, v.Время
from (select 'Понедельник' ДеньНедели union select 'Вторник' ДеньНедели union select 'Среда' ДеньНедели union select 'Четверг' ДеньНедели union select 'Пятница' ДеньНедели union select 'Суббота' ДеньНедели union select 'Воскресенье' ДеньНедели) d
cross join ПромежуткиВремени v

Можно это сделать красивее без union?
Простите, если вопрос тупой. Но вот не знаю, в тырнете не получилось найти.
9 сен 16, 16:12    [19648016]     Ответить | Цитировать Сообщить модератору
 Re: Вроде простой вопрос - сгенерить таблицу с днями неделями без Union в запросе  [new]
iljy
Member

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

from (values('Понедельник'), ('Вторник'), ('Среда'), ('Четверг'), ('Пятница'), ('Суббота'), ('Воскресенье')) d(ДеньНедели)


достаточно красиво?

Сообщение было отредактировано: 9 сен 16, 16:54
9 сен 16, 16:40    [19648155]     Ответить | Цитировать Сообщить модератору
 Re: Вроде простой вопрос - сгенерить таблицу с днями неделями без Union в запросе  [new]
komrad
Member

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

в качестве пятничного прикола ;)

+ уверен, что можно и по-элегантней
set language russian
;with hrs (dt1,dt2) as 
(select 
	dateadd(mi,15*number,'20160905 08:00:00')
	,dateadd(mi,15*(number+1),'20160905 08:00:00')
from master.dbo.spt_values 
where name is null
and dateadd(mi,15*number,'20160905 08:00:00')<'20160905 22:00:00'
),
dts (n,wd) as 
(
select top 7 
number
,datename(dw,convert(datetime,'20160905')+number) [Weekday]
from master.dbo.spt_values 
where name is null
)
select 
	wd [Weekday]
	,convert(varchar(20),dt1,108) + ' - ' + convert(varchar(20),dt2,108)
from dts
cross join hrs
order by n,2
9 сен 16, 17:04    [19648273]     Ответить | Цитировать Сообщить модератору
 Re: Вроде простой вопрос - сгенерить таблицу с днями неделями без Union в запросе  [new]
JustNick
Member

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

Да, так получше будет, конечно.
Но тоже не идеал ©
:D

Все равно спасибо.
9 сен 16, 17:16    [19648335]     Ответить | Цитировать Сообщить модератору
 Re: Вроде простой вопрос - сгенерить таблицу с днями неделями без Union в запросе  [new]
JustNick
Member

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

элегантней уже нельзя, просто некуда уже! И так разрыв сознания )))
Спасибо. Решение как раз, чтобы в пятницу проснуться
9 сен 16, 17:21    [19648359]     Ответить | Цитировать Сообщить модератору
 Re: Вроде простой вопрос - сгенерить таблицу с днями неделями без Union в запросе  [new]
komrad
Member

Откуда:
Сообщений: 5735
JustNick
komrad,

элегантней уже нельзя, просто некуда уже! И так разрыв сознания )))
Спасибо. Решение как раз, чтобы в пятницу проснуться


ну тогда можно и упростить немного ;)

+
set language russian
;with dates (dw,dt1,dt2) as 
(select
	 datename(dw,dateadd(mi,15*number,'20160905 08:00:00'))
	,dateadd(mi,15*number,'20160905 08:00:00')
	,dateadd(mi,15*(number+1),'20160905 08:00:00')
from master.dbo.spt_values 
where name is null
and dateadd(mi,15*number,'20160905 08:00:00')<'20160911 22:00:00'
)
select 
	dw
	,convert(varchar(20),dt1,108) + ' - ' + convert(varchar(20),dt2,108)
from dates 
where datepart(hh,dt1) between 8 and 21 
9 сен 16, 19:00    [19648698]     Ответить | Цитировать Сообщить модератору
 Re: Вроде простой вопрос - сгенерить таблицу с днями неделями без Union в запросе  [new]
aleks2
Guest
JustNick
iljy,

Да, так получше будет, конечно.
Но тоже не идеал ©
:D

Все равно спасибо.


Ты не стесняйся пользоваться табличками. MS SQL для этого и делали.
10 сен 16, 06:49    [19649957]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить