powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Еще раз про PIVOT
3 сообщений из 3, страница 1 из 1
Еще раз про PIVOT
    #38681517
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго!

Есть структура:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
if object_id('TMain') is not null drop table TMain
if object_id('TExt') is not null drop table TExt
go
Create table TMain 
( Id   int Null, 
  Col1 varchar(100) Null, 
  Col2 varchar(100) Null, 
  Col3 varchar(100)Null
)
go
Create table TExt
(
  TMain_Id  int,
  param_KEY varchar(100),
  value     varchar(100)
)
go
insert into TMain(Id)
Select 1 union Select 2 union select 3
go 
insert into TExt(TMain_Id, param_KEY, value)
Select 1, 'Col1', 'Value1_1' union Select 1, 'Col2', 'Value1_2' union Select 1, 'Col3', 'Value1_3' union
Select 2, 'Col1', 'Value2_1' union Select 2, 'Col2', 'Value2_2' union Select 2, 'Col3', 'Value2_3'
go 



Задача тривиальная - обеспечить pivot для таблицы TMain , т.е. в соответствующие колонки Col1/Col2/Col3 записать значения value из TExt , где param_KEY соответствует имени колонки.

Есть не оптимальный, но рабочий вариант:
Код: sql
1.
2.
3.
4.
update TMain
  Set Col1 = (select value from TExt where TExt.TMain_Id = TMain.Id and TExt.param_KEY = 'Col1'),
      Col2 = (select value from TExt where TExt.TMain_Id = TMain.Id and TExt.param_KEY = 'Col2'),
      Col3 = (select value from TExt where TExt.TMain_Id = TMain.Id and TExt.param_KEY = 'Col3')



не оптимальный - три раза идет скан таблицы TExt


В чем вопрос-то: почему следующий апдейт обновляет только один столбец ( Col1 ):
Код: sql
1.
2.
3.
4.
5.
6.
update TMain
  Set Col1 = Case when param_KEY = 'Col1' then value End,
      Col2 = Case when param_KEY = 'Col2' then value End,
      Col3 = Case when param_KEY = 'Col3' then value End
from TExt, TMain
  where TExt.TMain_Id = TMain.Id



Мои ожидания - должны обновиться все столбцы Col(1,2,3)
Видимо, пятница влияет негативно =(
...
Рейтинг: 0 / 0
Еще раз про PIVOT
    #38681519
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
'Adaptive Server Enterprise/15.7.0/EBF 22305 SMP SP61 /P/Sun_svr4/OS 5.10/ase157sp6x/3341/64-bit/FBO/Fri Feb 21 11:55:38 2014'
...
Рейтинг: 0 / 0
Еще раз про PIVOT
    #38681641
bamka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обновляется не первый столбец, обновляются все 3, но значениями, которые получились в результате JOIN.
Посмотрите что возвращает запрос, которым вы апдейтите:
Код: sql
1.
2.
3.
4.
5.
6.
select TMain.Id, param_KEY, value, 
      Col1 = Case when param_KEY = 'Col1' then value End,
      Col2 = Case when param_KEY = 'Col2' then value End,
      Col3 = Case when param_KEY = 'Col3' then value End
from TExt, TMain
  where TExt.TMain_Id = TMain.Id
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Еще раз про PIVOT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]