Мне нужно преобразовать несколько похожих записей в одну запись.
Может быть до 10 строк, которые необходимо объединить.
Каждая группа строк, которые нужно объединить, имеет одинаковый идентификатор. И значения данных строки не имеют значения (на самом деле это GUID).
Данные выглядят так:
Таблица A
ID C1 C2 C3
ID1 x x x
ID1 y y y
ID2 y y y
ID2 x x x
ID2 y y y
ID2 y y y
ID3 x x x
ID3 y y y
ID3 y y y
Мне нужно преобразовать в эту структуру и иметь только одну запись для каждого идентификатора. Может быть N столбцов в зависимости от количества записей с одинаковым идентификатором (около 10).
Таблица B
ID C1 C2 C3 C1A C2A C3A C1B C2B C3B
ID1 x x x y y y null null null
ID2 y y y x x x y y y
ID3 x x x y y y y y y
Я не могу изменить таблицу B вообще. Просто объедините или вставьте его.
Я использую SQL Server 2008 R2, и объем таблицы A составляет около миллиона записей.
Любая помощь очень ценится.
ОБНОВЛЕНИЕ: добавление реальных определений таблиц.
Вот скрипт создания TableA:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[IntervalPivotTable](
[UID] [uniqueidentifier] NOT NULL,
[ServiceHash] [int] NULL,
[IntervalID] [nvarchar](50) NULL,
[IntervalTypeID] [nvarchar](50) NULL,
[IntervalGroupID] [nvarchar](50) NULL,
[DrivingConditionID] [nvarchar](50) NULL,
CONSTRAINT [PK_IntervalPivotTable] PRIMARY KEY CLUSTERED
(
[UID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[IntervalPivotTable] ADD CONSTRAINT [DF_IntervalPivotTable_UID] DEFAULT (newid()) FOR [UID]
GO
Вот скрипт создания TableB:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[PivotedIntervals](
[ServiceHash] [int] NULL,
[IntervalID_0] [nvarchar](50) NULL,
[IntervalTypeID_0] [nvarchar](50) NULL,
[IntervalGroupID_0] [nvarchar](50) NULL,
[DrivingConditionID_0] [nvarchar](50) NULL,
[IntervalID_1] [nvarchar](50) NULL,
[IntervalTypeID_1] [nvarchar](50) NULL,
[IntervalGroupID_1] [nvarchar](50) NULL,
[DrivingConditionID_1] [nvarchar](50) NULL,
[IntervalID_2] [nvarchar](50) NULL,
[IntervalTypeID_2] [nvarchar](50) NULL,
[IntervalGroupID_2] [nvarchar](50) NULL,
[DrivingConditionID_2] [nvarchar](50) NULL,
[IntervalID_3] [nvarchar](50) NULL,
[IntervalTypeID_3] [nvarchar](50) NULL,
[IntervalGroupID_3] [nvarchar](50) NULL,
[DrivingConditionID_3] [nvarchar](50) NULL,
[IntervalID_4] [nvarchar](50) NULL,
[IntervalTypeID_4] [nvarchar](50) NULL,
[IntervalGroupID_4] [nvarchar](50) NULL,
[DrivingConditionID_4] [nvarchar](50) NULL,
[IntervalID_5] [nvarchar](50) NULL,
[IntervalTypeID_5] [nvarchar](50) NULL,
[IntervalGroupID_5] [nvarchar](50) NULL,
[DrivingConditionID_5] [nvarchar](50) NULL,
[IntervalID_6] [nvarchar](50) NULL,
[IntervalTypeID_6] [nvarchar](50) NULL,
[IntervalGroupID_6] [nvarchar](50) NULL,
[DrivingConditionID_6] [nvarchar](50) NULL,
[IntervalID_7] [nvarchar](50) NULL,
[IntervalTypeID_7] [nvarchar](50) NULL,
[IntervalGroupID_7] [nvarchar](50) NULL,
[DrivingConditionID_7] [nvarchar](50) NULL,
[IntervalID_8] [nvarchar](50) NULL,
[IntervalTypeID_8] [nvarchar](50) NULL,
[IntervalGroupID_8] [nvarchar](50) NULL,
[DrivingConditionID_8] [nvarchar](50) NULL,
[IntervalID_9] [nvarchar](50) NULL,
[IntervalTypeID_9] [nvarchar](50) NULL,
[IntervalGroupID_9] [nvarchar](50) NULL,
[DrivingConditionID_9] [nvarchar](50) NULL,
[IntervalID_10] [nvarchar](50) NULL,
[IntervalTypeID_10] [nvarchar](50) NULL,
[IntervalGroupID_10] [nvarchar](50) NULL,
[DrivingConditionID_10] [nvarchar](50) NULL
) ON [PRIMARY]
GO