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

Откуда: Moscow
Сообщений: 907
Привет. Я больше C# прогер, поэтому похоже задам тупой вопрос.

Имеется табличка vals:
id
1
2
3


нужно в другую табличку вставить чтобы для каждой записи из vals получилось следующее:
idValIdNoYear
...112015
...122016
...132017
...212015
...222016
...232017


Правильно ли я понимаю, что это решает только курсорами ? Нету ли какого-то заумного запроса типа "merge into" ?
Нравятся мне красивые решения на чистом SQL конечно :)
31 авг 15, 20:05    [18092915]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть-Размножить данные при переносец в другую таблицу.  [new]
Glory
Member

Откуда:
Сообщений: 104760
ProBiotek
Правильно ли я понимаю, что это решает только курсорами ?

Неправильно
ProBiotek
Нету ли какого-то заумного запроса типа "merge into" ?

Есть простой cross join
31 авг 15, 20:09    [18092921]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть-Размножить данные при переносец в другую таблицу.  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Glory,

декартово произведение ? оооокей. сейчас попробую.
31 авг 15, 20:17    [18092937]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть-Размножить данные при переносец в другую таблицу.  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Готово. Спасибо

select *
from (select val.id as ValId from [Vals] val) as val
join (
select '2015 год' as Name1
union all
select '2016 год' as Name1
union all
select '2017 год' as name1
) as A on 1=1
31 авг 15, 20:47    [18092995]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть-Размножить данные при переносец в другую таблицу.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20581
А чё так замороченно? подзапрос какой-то... почему не просто
SELECT [Vals].id ValId, A.[No], A.[Year]
FROM [Vals],(select '2015 год' [Year], 1 [No]
             union all
             select '2016 год', 2
             union all
             select '2017 год', 3
             ) as A
;
1 сен 15, 09:10    [18093828]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть-Размножить данные при переносец в другую таблицу.  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Akina,

эм. Ну вы привели полный аналог того, что я написал, и с подзапросом даже. Планы наверное идентичны :)

Я просто, как указал выше, больше C# прогер и просто позабыл каков минимальный синтаксис для селекта. Забыл что можно и не джойнить а просто перечислить соединяемые запросы.
1 сен 15, 10:43    [18094133]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть-Размножить данные при переносец в другую таблицу.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
ProBiotek, одно замечание, вместо JOIN ... ON 1=1 можно написать просто CROSS JOIN ...
1 сен 15, 10:50    [18094160]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть-Размножить данные при переносец в другую таблицу.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20581
ProBiotek
вы привели полный аналог того, что я написал, и с подзапросом даже.

Это не так.
Я убрал первый подзапрос, который as val. Сервер, конечно, умный, но формально он имеет право материализовать этот вот
(select val.id as ValId from [Vals] val) as val

и будет тебе щастьице...
Точно так же он, конечно, сразу посчитает, что 1=1 - это True, на который можно воскласть, но опять же формально он имеет право считать эту хрень для каждой пары записей.
1 сен 15, 11:09    [18094261]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть-Размножить данные при переносец в другую таблицу.  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Akina,

А ну да, Сори. я проглядел.
1 сен 15, 11:16    [18094281]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить