在SQL中使用或不使用聚合动态地转动varchar字段 [英] Pivot varchar fields dynamically with or without aggregate in SQL

查看:71
本文介绍了在SQL中使用或不使用聚合动态地转动varchar字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一张桌子如下



TName Scode

AKAT Allow1

AKAT Allow2
AKAT Allow3

AKAT Allow4

AkCT Allow1

AKCT Allow2

AKCT Allow3
AKST Allow1

AKST Allow2

AKST Allow3

AKST Allow4

AKST Allow5
。 。

。 。

。 。





我想得到如下结果:



AKAT AKCT AKST。 。 。

Allow1 Allow1 Allow1。 。 。

允许2允许2允许2。 。 。

允许3允许3允许3。 。 。

Allow4 Allow4。

Allow5



我尝试过:



我通过谷歌搜索尝试了多个查询,但没有人帮助过。



可以有很多Tnames,所以我不能有静态查询。并且字段是varchar数据类型,所以不确定是否可以使用聚合。



我可以在表中添加一个TID列作为数字字段,但那些TID将是相同的特别是Tname。如果这有助于查询。

I have a table as below

TName Scode
AKAT Allow1
AKAT Allow2
AKAT Allow3
AKAT Allow4
AkCT Allow1
AKCT Allow2
AKCT Allow3
AKST Allow1
AKST Allow2
AKST Allow3
AKST Allow4
AKST Allow5
. .
. .
. .


I want a result as below:

AKAT AKCT AKST . . .
Allow1 Allow1 Allow1 . . .
Allow2 Allow2 Allow2 . . .
Allow3 Allow3 Allow3 . . .
Allow4 Allow4 .
Allow5

What I have tried:

I have tried multiple queries by googling but none have helped.

There can be many Tnames so i cannot have a static query. and the fields are varchar datatype so not sure if aggregate can be used.

I can add a TID column in the table as numeric field but those TID's will be same for particular Tname. if thats helpful in querying.

推荐答案

检查:

Check this:
CREATE TABLE #tmp (TName VARCHAR(30), Scode VARCHAR(30))

INSERT INTO #tmp(TName, Scode)
VALUES('AKAT', 'Allow1'),
('AKAT', 'Allow2'),
('AKAT', 'Allow3'),
('AKAT', 'Allow4'),
('AkCT', 'Allow1'),
('AKCT', 'Allow2'),
('AKCT', 'Allow3'),
('AKST', 'Allow1'),
('AKST', 'Allow2'),
('AKST', 'Allow3'),
('AKST', 'Allow4'),
('AKST', 'Allow5')

DECLARE @cols NVARCHAR(4000) = STUFF((SELECT DISTINCT '],[' + TName
				FROM #tmp
				ORDER BY '],[' + TName
				FOR XML PATH('')) , 1, 2, '') + ']'

--SELECT @cols

DECLARE @Qry NVARCHAR(MAX) = N'
SELECT RowNo, ' + @cols +
'FROM (
	SELECT ROW_NUMBER() OVER(PARTITION BY TName ORDER BY Scode) As RowNo, *
	FROM #tmp
	) dt
PIVOT (MAX(Scode) FOR TName IN(' + @cols + ')) pvt'

EXEC(@Qry)

DROP TABLE #tmp





结果:



Result:

RowNo	AKAT	AkCT	AKST
1		Allow1	Allow1	Allow1
2		Allow2	Allow2	Allow2
3		Allow3	Allow3	Allow3
4		Allow4	NULL	Allow4
5		NULL	NULL	Allow5


这篇关于在SQL中使用或不使用聚合动态地转动varchar字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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