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

Откуда:
Сообщений: 12
Есть форма отчета, под которую пытаюсь подогнать выборку.
В одном месте получается извращение: несколько таблиц пытаюсь записать в одну. С 1 по 6 это одна таблица, с 7 по 10 должна быть вторая таблица. Только не спрашивайте почему. Так надо.

Картинка с другого сайта.

Причем вторая таблица состоит только из двух столбцов: температура и показатель
То есть я насильно определенную часть строк впихиваю в str3-str6.
Как бы мне нормально переместить-то их? Извращением только?

Пока делала так:
insert into @totaltbl (str1, str2,  str10) -- @totaltbl - внутренняя таблица итоговая, куда все впихивается
		select otogn_frak, t_kipen, sg_date from @SostavSimDis1 
		where (otogn_frak = 'Температура отгона 30%' or otogn_frak = 'Температура отгона 20%' or otogn_frak = 'Температура отгона 10%' or otogn_frak = 'Температура Н.К.')
		and sg_date = @per
		 
		insert into @totaltbl (str3, str4) 
		select otogn_frak, t_kipen from @SostavSimDis1 
		where (otogn_frak = 'Температура отгона 40%' or otogn_frak = 'Температура отгона 50%' or otogn_frak = 'Температура отгона 60%' or otogn_frak = 'Температура отгона 70%')
		and sg_date = @per


Делая так:
insert into @totaltbl (str1, str2,  str10)
		select otogn_frak, t_kipen, sg_date from @SostavSimDis1 
		where (otogn_frak = 'Температура отгона 30%' or otogn_frak = 'Температура отгона 20%' or otogn_frak = 'Температура отгона 10%' or otogn_frak = 'Температура Н.К.')
		and sg_date = @per

update @totaltbl
		set str3 =  otogn_frak 
		--set	str4 = t_kipen		
		from @SostavSimDis1 where 
		otogn_frak in ( 'Температура отгона 40%' ,'Температура отгона 50%' ,'Температура отгона 60%' ,'Температура 70%')
		and sg_date = @per 
		and str1 in ( 'Температура Н.К.' , 'Температура отгона 10%','Температура отгона 20%', 'Температура отгона 30%')
		
		update 	@totaltbl set str3 =  otogn_frak
		from @SostavSimDis1 where 
		otogn_frak = 'Температура отгона 50%' 
		and sg_date = @per 
		and str1 = 'Температура отгона 10%'  
		
		update 	@totaltbl set str3 =  otogn_frak
		from @SostavSimDis1 where 
		otogn_frak = 'Температура отгона 60%' 
		and sg_date = @per 
		and str1 = 'Температура отгона 20%'  
		
		update 	@totaltbl set str3 =  otogn_frak
		from @SostavSimDis1 where 
		otogn_frak = 'Температура отгона 70%' 
		and sg_date = @per 
		and str1 = 'Температура отгона 30%'


как-то получается то, что надо. Но это надо прописывать каждую строку и столбец, текст кода сильно увеличивается и очень похоже на бредятину.

Результат:
Картинка с другого сайта.
Блин, можно как-то по-другому реализовать?
В SQL не профи.
3 сен 14, 08:30    [16526807]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
LianaShoms
Member

Откуда:
Сообщений: 12
Эй тьфу ты....

К сообщению приложен файл. Размер - 94Kb
3 сен 14, 08:35    [16526825]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
LianaShoms
Member

Откуда:
Сообщений: 12
второй

К сообщению приложен файл. Размер - 69Kb
3 сен 14, 08:35    [16526826]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
aleks2
Guest
Дурацкая проектирование данных, но дело ваше

with
f as (select otogn_frak, t_kipen, sg_date, row_number() over(order by otogn_frak) as N
        from @SostavSimDis1 
		where (otogn_frak = 'Температура отгона 30%' or otogn_frak = 'Температура отгона 20%' or otogn_frak = 'Температура отгона 10%' or otogn_frak = 'Температура Н.К.')
		and sg_date = @per
)
,
s as (select otogn_frak, t_kipen, row_number() over(order by otogn_frak) as N
        from @SostavSimDis1 
		where (otogn_frak = 'Температура отгона 40%' or otogn_frak = 'Температура отгона 50%' or otogn_frak = 'Температура отгона 60%' or otogn_frak = 'Температура отгона 70%')
		and sg_date = @per
)
insert into @totaltbl (str1, str2, str3, str4, str10) -- @totaltbl - внутренняя таблица итоговая, куда все впихивается
  select f.otogn_frak, f.t_kipen, s.otogn_frak, s.t_kipen, f.sg_date
    from f full outer join s on f.N = s.N
3 сен 14, 10:25    [16527227]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
LianaShoms
Member

Откуда:
Сообщений: 12
aleks2,
полностью согласна.
over (order...) не катит, потому что версия 8 R2
а over (order...) только с 12 кажется
3 сен 14, 11:06    [16527507]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
Glory
Member

Откуда:
Сообщений: 104751
LianaShoms
кажется

Ключевое слово
3 сен 14, 11:10    [16527533]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
LianaShoms
Member

Откуда:
Сообщений: 12
Glory
Ключевое слово

Ок, пошла пробовать
3 сен 14, 11:15    [16527583]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
LianaShoms
Member

Откуда:
Сообщений: 12
aleks2,
будьте добры еще подсказать. у меня ошибка

Msg 319, Level 15, State 1, Line 183
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
Msg 102, Level 15, State 1, Line 189
Incorrect syntax near ','.
3 сен 14, 12:17    [16528223]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
Glory
Member

Откуда:
Сообщений: 104751
LianaShoms
If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Здесь все написано

Сообщение было отредактировано: 3 сен 14, 12:19
3 сен 14, 12:18    [16528241]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
Maxx
Member [скрыт]

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

;with .....
3 сен 14, 12:18    [16528243]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
LianaShoms
Member

Откуда:
Сообщений: 12
Glory
LianaShoms
If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Здесь все написано

Спасибо, я читать и переводить не разучилась. Раз написала сюда, значит не понимаю и прошу помочь.
3 сен 14, 12:52    [16528617]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
Glory
Member

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

И вы можете огласить ваш перевод ?
3 сен 14, 12:57    [16528685]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
LianaShoms
Member

Откуда:
Сообщений: 12
Maxx
LianaShoms,

;with .....

спасибо большое и человеческое!!! работает.
3 сен 14, 13:04    [16528762]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
LianaShoms
Member

Откуда:
Сообщений: 12
Glory
LianaShoms
Спасибо, я читать и переводить не разучилась.

И вы можете огласить ваш перевод ?

не собираюсь продолжать дискуссию. извините. это уже флуд. а я по факту
3 сен 14, 13:05    [16528769]     Ответить | Цитировать Сообщить модератору
 Re: Объединение несколько табл в одну. Update/insert таблицы. Нужна консультация по коду.  [new]
Glory
Member

Откуда:
Сообщений: 104751
LianaShoms
не собираюсь продолжать дискуссию.

Да потому что не было никакого перевода. "По факту"
the previous statement must be terminated with a semicolon.
3 сен 14, 13:07    [16528780]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить