Мне удалось успешно объединить различные значения полей в отдельные столбцы, но я хочу объединить все эти отдельные (поворотные) столбцы в один столбец.Я не знаю, сколько поворотных столбцов я получаю во время выполнения, поэтому я не могу просто использовать Column1 + Column2 + Column3 и т. Д.
Вот мой sql
--Create a table variable to hold my source data
declare @datatable table
(
OrderId int,
ProductId int,
ClientName varchar(50)
)
--insert some data
insert into @datatable values (1, 2, 'Joe Bloggs')
insert into @datatable values (1, 2, 'Frank Bloggs')
--Create a temp table
--that introduces a new field (called Header)
--to give me column names for my pivoted data
IF OBJECT_ID('tempdb..#PivotedClients') IS NOT NULL DROP TABLE #PivotedClients
create table #PivotedClients
(
OrderId int,
ProductId int,
ClientName varchar(50),
Header varchar(100)
)
insert into #PivotedClients
select OrderId,
ProductId,
ClientName,
'Client ' + Cast(Rank() Over (Partition by OrderId
order by ClientName) as varchar(3))
from @datatable
--Create variables to hold my column names
--and my (dynamic) sql
declare @pivotcolumns nvarchar(max),
@colsWithNoNulls nvarchar(max),
@sqlquery nvarchar(max)
set @pivotcolumns = STUFF(
(
select distinct ',' + QUOTENAME(Header)
from #PivotedClients
for XML PATH (''), TYPE
).value('.', 'nvarchar(max)')
,1,1,'')
set @colsWithNoNulls = STUFF(
(
SELECT DISTINCT ',ISNULL(' + QUOTENAME(Header) + ', '''') ' + QUOTENAME(Header)
FROM #PivotedClients
for XML PATH (''), TYPE
).value('.', 'NVARCHAR(max)')
,1,1,''
)
if OBJECT_ID('tempdb..##Clients ') is not null drop TABLE ##Clients
set @sqlquery = 'select distinct OrderId,
ProductID,
' + @colsWithNoNulls + '
into ##Clients
from
(
select OrderId,
ClientName,
ProductID,
Header
from #PivotedClients) x
pivot
(
Max(ClientName)
for Header in (' + @pivotcolumns + ')
) p'
exec sp_executesql @sqlquery
----
select *
from ##Clients
----
набор записей, который у меня в настоящее время заканчивается:
OrderId ProductId Client1 Client 2
1 2 Frank Bloggs Joe Blogs
То, что я хочу, это:
OrderID ProductId Clients
1 2 Frank Bloggs Joe Bloggs
Я не знаю, сколько «поворотных» столбцов у меня закончитсяво время выполнения, поэтому я не могу просто использовать Client1 + Client2 и т. д.