如何在SQL中更改行到列 [英] How to change row to column in SQL

查看:57
本文介绍了如何在SQL中更改行到列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

create table example(MONTH VARCHAR(MAX),ORDERS VARCHAR(MAX))

INSERT INTO example VALUES('Jan','1');
INSERT INTO example VALUES('Feb','2');
INSERT INTO example VALUES('Mar','3');

SELECT* FROM example
SELECT  'Assign' Assign ,*,'Total' [Total] into #final  from (SELECT * FROM example) AS A pivot(MAX(ORDERS) FOR[MONTH] IN(a,b,c)) AS pvt
select * from #final
DROP table #final





它需要显示月份名称而不是a,b,c它是一个动态表格所以月份名称每次都会改变



什么一世 尝试过:



它需要显示月份名称而不是a,b,c它是动态表所以月份名称每次都会改变



it need to show the month name instead of a,b,c it is a dynamic table so month name will change everytime

What I have tried:

it need to show the month name instead of a,b,c it is a dynamic table so month name will change everytime

推荐答案

首先你的查询的in子句是错误的。正确的做法是



First your in clause of query is wrong. Correct way of doing it is

DECLARE @TBL TABLE
(
MONTH VARCHAR(MAX),
ORDERS VARCHAR(MAX)
)

INSERT INTO @TBL VALUES('Jan','1');
INSERT INTO @TBL VALUES('Feb','2');
INSERT INTO @TBL VALUES('Mar','3');

SELECT  'Assign' Assign ,*,'Total' [Total] 
from 
(
	SELECT * FROM @TBL
) AS A pivot(MAX(ORDERS) FOR[MONTH] IN(Jan,Feb,Mar)) AS pvt



其次,因为列本质上是动态的,因此需要动态的数据透视查询,这是非常简单。试试这些链接吧。



SQL Server动态PIVOT查询? - 堆栈溢出 [ ^ ]

SQL Server中的动态数据透视表 [ ^ ]

Sql Server中的动态PIVOT | SqlHints.com [ ^ ]


Secondly since columns are dynamic in nature hence a dynamic pivot query is required which is quite simple. Try these links for an idea.

SQL Server dynamic PIVOT query? - Stack Overflow[^]
Dynamic Pivot Query in SQL Server[^]
Dynamic PIVOT in Sql Server | SqlHints.com[^]


尝试下面的查询,因为列是动态来的



创建表#temp



MONTH VARCHAR(MAX),

ORDERS VARCHAR(MAX)





INSERT INTO #temp VALUES('Jan','1');

INSERT INTO #temp VALUES('Feb','2');

INSERT INTO #temp VALUES('Mar','3');

INSERT INTO #temp VALUES('Feb','7');





DECLARE @cols AS NVARCHAR(MAX),

@query AS NVARCHAR(MAX),

@ cols1 AS NVARCHAR(MAX)



选择@ cols1 =(SELECT','+ QUOTENAME(MONTH)

来自#temp order by orders

FOR XML PATH(''),TYPE).value('。','NVARCHAR(MAX)')





select @ cols = STUFF(@ cols1

,1,1,'')



set @query ='SELECT'+ @cols +'

来自



选择MONTH,ORDERS

来自#temp

)x

pivot



max(ORDERS)
MONTH的
('+ @cols +')

)p'

打印@query



执行(@query)
Try below query as columns are coming dynamically

create table #temp
(
MONTH VARCHAR(MAX),
ORDERS VARCHAR(MAX)
)

INSERT INTO #temp VALUES('Jan','1');
INSERT INTO #temp VALUES('Feb','2');
INSERT INTO #temp VALUES('Mar','3');
INSERT INTO #temp VALUES('Feb','7');


DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@cols1 AS NVARCHAR(MAX)

select @cols1=(SELECT ',' + QUOTENAME(MONTH)
from #temp order by orders
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')


select @cols=STUFF(@cols1
,1,1,'' )

set @query = 'SELECT ' + @cols + '
from
(
select MONTH, ORDERS
from #temp
) x
pivot
(
max(ORDERS)
for MONTH in (' + @cols + ')
) p '
print @query

execute(@query)


这篇关于如何在SQL中更改行到列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆