Данные сводной таблицы в sql


2 принят

Это может сработать для вас. Пользователь @jarlh прав, говоря в комментариях, что вам нужно указать версию SQL Server, которую вы используете.

coluName

Итак, идея состоит в том, чтобы использовать простой PIVOTна вашем столе, поворачивая столбец coluName. Значения, которые нужно динамически получать каждый раз, поскольку у вас нет статического списка intзначений.

Вы можете проверить хорошее объяснение на динамическом повороте здесь .

Вы можете проверить рабочую версию этого запроса здесь .

EDIT :

Чтобы ответить на ваш вопрос в комментариях, то же таблица #t может быть использован , как это (указать ваши правильные типы данных, я ставлю int, numericи в varcharкачестве примера):

if object_id('tempdb..#t') is not null drop table #t 
create table #t (id int, amount numeric, coluName varchar(10))

insert into #t
select e.id, e.Amount, i.ColuName
from FixAm e inner join InCo i on i.CCode = e.CCode
where i.cid = 49 

Затем просто используйте вышеуказанный динамический стержень.


0
IF Object_id('tempdb..#tempTab') IS NOT NULL
Drop table #tempTab

;WITH Cte(id,Amount,coluName    )
AS
(
Select 13,25000,'abccol' UNION ALL  
Select 13,2300, 'defcol'  
)
SELECT * INTO #tempTab FROM cte 

Declare @Columns nvarchar(max), @Sql nvarchar(max)


SELECT @Columns=STUFF((SELECT DISTINCT ', '+ QuoteName(coluName)  FROM #tempTab  
FOR XML PATH ('')),1,1,'') from #tempTab 
--SELECT @Columns

SET @Sql='SELECT [id],'+@Columns+'From
            (
            SELECT id,Amount,coluName
            from #tempTab
            )
            AS Src
                Pivot
                (
                MAX(Amount) For coluName  IN ('+@Columns +')
                )Pvt '
Print @Sql
EXecute (@Sql)

Вывод

id  abccol  defcol
-------------------
13  25000   2300
SQL, SQL-сервер, стержень,

sql,sql-server,pivot,

0

Ответов: 2


2 принят

Это может сработать для вас. Пользователь @jarlh прав, говоря в комментариях, что вам нужно указать версию SQL Server, которую вы используете.

coluName

Итак, идея состоит в том, чтобы использовать простой PIVOTна вашем столе, поворачивая столбец coluName. Значения, которые нужно динамически получать каждый раз, поскольку у вас нет статического списка intзначений.

Вы можете проверить хорошее объяснение на динамическом повороте здесь .

Вы можете проверить рабочую версию этого запроса здесь .

EDIT :

Чтобы ответить на ваш вопрос в комментариях, то же таблица #t может быть использован , как это (указать ваши правильные типы данных, я ставлю int, numericи в varcharкачестве примера):

if object_id('tempdb..#t') is not null drop table #t 
create table #t (id int, amount numeric, coluName varchar(10))

insert into #t
select e.id, e.Amount, i.ColuName
from FixAm e inner join InCo i on i.CCode = e.CCode
where i.cid = 49 

Затем просто используйте вышеуказанный динамический стержень.


0
IF Object_id('tempdb..#tempTab') IS NOT NULL
Drop table #tempTab

;WITH Cte(id,Amount,coluName    )
AS
(
Select 13,25000,'abccol' UNION ALL  
Select 13,2300, 'defcol'  
)
SELECT * INTO #tempTab FROM cte 

Declare @Columns nvarchar(max), @Sql nvarchar(max)


SELECT @Columns=STUFF((SELECT DISTINCT ', '+ QuoteName(coluName)  FROM #tempTab  
FOR XML PATH ('')),1,1,'') from #tempTab 
--SELECT @Columns

SET @Sql='SELECT [id],'+@Columns+'From
            (
            SELECT id,Amount,coluName
            from #tempTab
            )
            AS Src
                Pivot
                (
                MAX(Amount) For coluName  IN ('+@Columns +')
                )Pvt '
Print @Sql
EXecute (@Sql)

Вывод

id  abccol  defcol
-------------------
13  25000   2300
SQL, SQL-сервер, стержень,
Похожие вопросы