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

Откуда:
Сообщений: 14
Есть такая таблица:

Id, Name
1 Name1
2 Name2
3 Name3

Нужно получить такой ответ:

Id, Name, Date
1 Name1 01.01.2014 06:00:00
1 Name1 01.01.2014 18:00:00
2 Name2 01.01.2014 06:00:00
2 Name2 01.01.2014 18:00:00
3 Name3 01.01.2014 06:00:00
3 Name3 01.01.2014 18:00:00
29 дек 14, 14:59    [17067682]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Tiger86
Нужно получить такой ответ:

И что вас останавливает от получения такого ответа ?
29 дек 14, 15:00    [17067701]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
cross apply ?
29 дек 14, 15:01    [17067710]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Tiger86
Member

Откуда:
Сообщений: 14
Как написать запрос, чтобы появилось поле дата и на каждую строчку в таблице выводилось две строчки с этой датой, но двумя разными временами (на 6 и на 18 часов).
29 дек 14, 15:02    [17067727]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Tiger86
Как написать запрос, чтобы появилось поле дата и на каждую строчку в таблице выводилось две строчки с этой датой, но двумя разными временами (на 6 и на 18 часов).

хорошо , что вы пытались сделать ? Ваш вариант решения ?
29 дек 14, 15:05    [17067755]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Tiger86
Как написать запрос, чтобы появилось поле дата

Появилось из ниоткуда ?
Или может у вас где-то храняться все даты ? Да еще с "двумя разными временами " ?
29 дек 14, 15:06    [17067775]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Tiger86
Member

Откуда:
Сообщений: 14
Glory, нет, дата может быть любой. Ее задает пользователь (передается как параметр в хранимую процедуру).
29 дек 14, 15:09    [17067791]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Tiger86
Ее задает пользователь (передается как параметр в хранимую процедуру).

И что мешает поместить эту переданную дату в ваш запрос ?
29 дек 14, 15:10    [17067800]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Адин из возможных вариантов
declare @t table (i int identity(1,1), name nvarchar(10))
insert into @t (name) values ('Name1'),('Name2'),('Name3')

select *
from @t 
  cross apply (values ('20140101') , ('20140202')) v(x)
29 дек 14, 15:15    [17067856]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Tiger86
Member

Откуда:
Сообщений: 14
Спс, CROSS помог.

DECLARE  @Date datetime
	
SET @Date = '2014-12-10 00:00:00';
			
			
DECLARE @FromDate SMALLDATETIME, @ToDate SMALLDATETIME;
SELECT @FromDate = DATEADD(HOUR, 6, @Date), @ToDate = DATEADD(HOUR, 18, @Date);
WITH [Hours](H) AS
(
 SELECT @FromDate WHERE @FromDate < @ToDate
 UNION ALL
 SELECT DATEADD(HOUR, 12, H) FROM Hours WHERE H < @ToDate
)

SELECT Id, Name Hours.H
FROM MyTable
CROSS JOIN Hours
ORDER BY Id
29 дек 14, 15:18    [17067878]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос  [new]
Tiger86
Member

Откуда:
Сообщений: 14
Maxx, Ваши вариант короче будет, спс.
29 дек 14, 15:21    [17067902]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить