powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ох уж этот Pivot (
8 сообщений из 8, страница 1 из 1
Ох уж этот Pivot (
    #39587305
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста. Есть вопрос, состоящий из двух частей.

Часть1.
Имеются такие таблицы:
Tab1
Id Name Field1 Field2 Field31 'Name1' null nullnull2 'Name2'null nullnull

Tab2
Id Tab1Id FieldName Value1 1 'Field1' 'Value1'2 1 'Field2' 'Value2'3 1 'Field3' 'Value4'4 2 'Field1' 'Value1'5 2 'Field2' 'Value2'6 2 'Field3' 'Value3'

Нужно получить результат запроса
Tab1Id Field1 Field2 Field31 'Value1' 'Value2' 'Value4'2 'Value1' 'Value2' 'Value3'

Часть2.
Полученные данные требуется залить в Tab1. Где уже добавлены столбцы Field1, Field2, Field3.

Т.е. просто решено удалить бесполезную таблицу Tab2, и все данные хранить в существующей Tab1. Изначально предполагалось, что количество типов будет различно, но в итоге их так и осталось строго 3 (Field1, Field2, Field3), в связи с чем удобней и проще все это хранить в одной таблице.

Похоже это очень простая задача, но видимо торможу под вечер уже :( и с Pivot очень давно не работал.
В частности не могу придумать как быть с тем, что Pivot требует агрегатной функции, а мне она не нужна. Мне нечего агрегировать - нужно лишь вывести все данные повернув их. И затем как составить запрос Update, который на основе этого результата проапдейтит первую таблицу.
...
Рейтинг: 0 / 0
Ох уж этот Pivot (
    #39587309
TsHeloWorlder,

Пивот делаешь для второй таблицы, с агрегацией , как надо. Результат джойнишь к первой. Апдейт можно сделать через мердж по условию совпадения
Не получается с пивотом - замени его на тройной джойн второй таблицы к первой...
...
Рейтинг: 0 / 0
Ох уж этот Pivot (
    #39587383
Awaiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можете помочь с пивотом ? в том и дело, что не могу врубится. как быть с тем, что требуется агрегатная функция, а мне она не нужна ?
...
Рейтинг: 0 / 0
Ох уж этот Pivot (
    #39587424
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Awaiter, если все равно как - max
...
Рейтинг: 0 / 0
Ох уж этот Pivot (
    #39587441
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderPivot требует агрегатной функции, а мне она не нужна. Мне нечего агрегировать - нужно лишь вывести все данные повернув их.Это такое требование, страховка от неуникальных сочетаний, а то серверу совершенно непонятно, как тогда выводить.
Поэтому ставьте, например, MAX, получится то, что вам нужно получить.
...
Рейтинг: 0 / 0
Ох уж этот Pivot (
    #39587675
Awaiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можете сам запрос пивотный дать ?
...
Рейтинг: 0 / 0
Ох уж этот Pivot (
    #39587729
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Awaiter,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DECLARE @t2 AS TABLE(Id int,	Tab1Id int,	FieldName VARCHAR(10),	Value VARCHAR(10))
INSERT @t2 (Id,	Tab1Id,	FieldName,	Value) VALUES
(1,	1,	'Field1',	'Value1'),
(2,	1,	'Field2',	'Value2'),
(3,	1,	'Field3',	'Value4'),
(4,	2,	'Field1',	'Value1'),
(5,	2,	'Field2',	'Value2'),
(6,	2,	'Field3',	'Value3')

select *
from (
select Tab1Id, Value, FieldName 
from @t2 ) as t2 
pivot ( max(Value) for FieldName in (Field1,Field2,Field3)) as pvt



Tab1Id Field1 Field2 Field3
1 Value1 Value2 Value4
2 Value1 Value2 Value3
...
Рейтинг: 0 / 0
Ох уж этот Pivot (
    #39588135
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Massa52,

Большое спасибо !
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ох уж этот Pivot (
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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