Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И что вас останавливает от получения такого ответа ? |
||
29 дек 14, 15:00 [17067701] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
cross apply ? |
29 дек 14, 15:01 [17067710] Ответить | Цитировать Сообщить модератору |
Tiger86 Member Откуда: Сообщений: 14 |
Как написать запрос, чтобы появилось поле дата и на каждую строчку в таблице выводилось две строчки с этой датой, но двумя разными временами (на 6 и на 18 часов). |
29 дек 14, 15:02 [17067727] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
хорошо , что вы пытались сделать ? Ваш вариант решения ? |
||
29 дек 14, 15:05 [17067755] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Появилось из ниоткуда ? Или может у вас где-то храняться все даты ? Да еще с "двумя разными временами " ? |
||
29 дек 14, 15:06 [17067775] Ответить | Цитировать Сообщить модератору |
Tiger86 Member Откуда: Сообщений: 14 |
Glory, нет, дата может быть любой. Ее задает пользователь (передается как параметр в хранимую процедуру). |
29 дек 14, 15:09 [17067791] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И что мешает поместить эту переданную дату в ваш запрос ? |
||
29 дек 14, 15:10 [17067800] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Tiger86 Member Откуда: Сообщений: 14 |
Maxx, Ваши вариант короче будет, спс. |
29 дек 14, 15:21 [17067902] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |