在本文中,我们将给您介绍关于在SQLServer中动态将多行合并为多列的详细内容,并且为您解答sql将多行数据合并为一行的相关问题,此外,我们还将为您提供关于SQL2005合并/将多行合并为一列、SQ
在本文中,我们将给您介绍关于在SQL Server中动态将多行合并为多列的详细内容,并且为您解答sql将多行数据合并为一行的相关问题,此外,我们还将为您提供关于SQL 2005合并/将多行合并为一列、SQL Server 将一列多行数据合并为一行、SQL SERVER 将多行数据合并成一行(转)、SQL Server中将多行的内容显示在一列中的知识。
本文目录一览:- 在SQL Server中动态将多行合并为多列(sql将多行数据合并为一行)
- SQL 2005合并/将多行合并为一列
- SQL Server 将一列多行数据合并为一行
- SQL SERVER 将多行数据合并成一行(转)
- SQL Server中将多行的内容显示在一列中
在SQL Server中动态将多行合并为多列(sql将多行数据合并为一行)
我有一个很大的数据库表,需要在上面使用Microsoft SQL Server动态执行以下操作。
从这样的结果:
badge | name | Job | KDA | Match - - - - - - - - - - - - - - - - T996 | Darrien | AP | 3.0 | 20 T996 | Darrien | ADC | 2.8 | 16 T996 | Darrien | TOP | 5.0 | 120
使用SQL的结果如下:
badge | name | AP_KDA | AP_Match | ADC_KDA | ADC_Match | TOP_KDA | TOP_Match - - - - - - - - -T996 | Darrien | 3.0 | 20 | 2.8 | 16 | 5.0 | 120
即使有30行,它也将合并为具有60列的单行。
我目前可以通过硬编码(请参见下面的示例)来做到这一点,但是不能动态地做到。
Select badge,name,( SELECT max(KDA) FROM table WHERE (h.badge = badge) AND (h.name = name) AND (Job = ''AP'')) AP_KDA,( SELECT max(Match) FROM table WHERE (h.badge = badge) AND (h.name = name) AND (Job = ''AP'')) AP_Match,( SELECT max(KDA) FROM table WHERE (h.badge = badge) AND (h.name = name) AND (Job = ''ADC'')) ADC_KDA,( SELECT max(Match) FROM table WHERE (h.badge = badge) AND (h.name = name) AND (Job = ''ADC'')) ADC_Match,( SELECT max(KDA) FROM table WHERE (h.badge = badge) AND (h.name = name) AND (Job = ''TOP'')) TOP_KDA,( SELECT max(Match) FROM table WHERE (h.badge = badge) AND (h.name = name) AND (Job = ''TOP'')) TOP_Matchfrom table h
我需要一个MSSQL语句,该语句允许我将多行合并为一行。第3列的Job
内容将与第4列和第5列的标头(KDA
和Match
)合并,成为新的列。
所以,如果有6倍不同的值Job
(比如Job1
通过Job6
),那么结果将有12列,如:Job1_KDA
,Job1_Match
,Job2_KDA
,Job2_Match
,等,由徽章和名称分组。
我需要一个可以遍历第3列数据的语句,因此不需要硬编码(针对每个可能的Job
值重复查询)或使用临时表。
答案1
小编典典我会使用动态SQL来做到这一点,但这是(http://sqlfiddle.com/#!6/a63a6/1/0)PIVOT解决方案:
SELECT badge, name, [AP_KDa], [AP_Match], [ADC_KDA],[ADC_Match],[TOP_KDA],[TOP_Match] FROM(SELECT badge, name, col, val FROM( SELECT *, Job+''_KDA'' as Col, KDA as Val FROM @T UNION SELECT *, Job+''_Match'' as Col,Match as Val FROM @T) t) ttPIVOT ( max(val) for Col in ([AP_KDa], [AP_Match], [ADC_KDA],[ADC_Match],[TOP_KDA],[TOP_Match]) ) AS pvt
奖励:这种如何将PIVOT与动态SQL(http://sqlfiddle.com/#!6/a63a6/7/0)结合使用的方法,我还是希望在没有PIVOT的情况下更简单地进行,但这对于我
:
SELECT badge, name, cast(Job+''_KDA'' as nvarchar(128)) as Col, KDA as Val INTO #Temp1 FROM Temp INSERT INTO #Temp1 SELECT badge, name, Job+''_Match'' as Col, Match as Val FROM TempDECLARE @columns nvarchar(max)SELECT @columns = COALESCE(@columns + '', '', '''') + Col FROM #Temp1 GROUP BY ColDECLARE @sql nvarchar(max) = ''SELECT badge, name, ''+@columns+'' FROM #Temp1 PIVOT ( max(val) for Col in (''+@columns+'') ) AS pvt''exec (@sql)DROP TABLE #Temp1
SQL 2005合并/将多行合并为一列
我们有些SQL杂语。说我有一个看起来像这样的结果…
61E77D90-D53D-4E2E-A09E-9D6F012EB59C | A
61E77D90-D53D-4E2E-A09E-9D6F012EB59C | B
61E77D90-D53D-4E2E-A09E-9D6F012EB59C | C
61E77D90-D53D-4E2E-A09E-9D6F012EB59C | D
7ce953ca-a55b-4c55-a52c-9d6f012ea903 | E
7ce953ca-a55b-4c55-a52c-9d6f012ea903 | F
有没有一种方法可以将这些结果在SQL中分组以返回为
61E77D90-D53D-4E2E-A09E-9D6F012EB59C | ABCD
7ce953ca-a55b-4c55-a52c-9d6f012ea903 | 英孚
有什么想法的人吗?
非常感谢
戴夫
SQL Server 将一列多行数据合并为一行
SELECT DISTINCT [列名]
,STUFF(
(
SELECT '',''+[列名]
FROM [表名]
WHERE [根据哪一列合并的列名]= A.列名
FOR XML PATH('''')
)
,1,1,''''
)AS 合并的别名
FROM [表名] AS 表的别名(A)
SQL SERVER 将多行数据合并成一行(转)
1)比如表中有三列数据:
2)执行如下查询:

1 SELECT [USER_NAME], [USER_ACCOUNT]
2 , [ROLE_NAME] = stuff((
3 SELECT '','' + [ROLE_NAME]
4 FROM [WAP_WORKSHEET].[dbo].[userTest]
5 WHERE [USER_ACCOUNT] = a.[USER_ACCOUNT]
6 FOR XML path('''')
7 ), 1, 1, '''')
8 FROM [WAP_WORKSHEET].[dbo].[userTest] a
9 GROUP BY [USER_NAME], [USER_ACCOUNT]

3)显示如下结果:
STUFF 函数:
a. 作用
stuff(param1, startIndex, length, param2)
将 param1 中自 startIndex (SQL 中都是从 1 开始,而非 0) 起,删除 length 个字符,然后用 param2 替换删掉的字符。
b. 参数
param1
一个字符数据表达式。param1 可以是常量、变量,也可以是字符列或二进制数据列。
startIndex
一个整数值,指定删除和插入的开始位置。如果 startIndex 或 length 为负,则返回空字符串。如果 startIndex 比 param1 长,则返回空字符串。startIndex 可以是 bigint 类型。
length
一个整数,指定要删除的字符数。如果 length 比 param1 长,则最多删除到 param1 中的最后一个字符。length 可以是 bigint 类型。
c. 返回类型
如果 param1 是受支持的字符数据类型,则返回字符数据。如果 param1 是一个受支持的 binary 数据类型,则返回二进制数据。
d. 备注
如果结果值大于返回类型支持的最大值,则产生错误。
FOR XML PATH 将查询结果集以 XML 形式展现,查询示例:
SELECT ''['' + [USER_NAME] + '','' + [ROLE_NAME] + '']''
FROM [WAP_WORKSHEET].[dbo].[userTest]
WHERE [USER_NAME] = ''蔡诗德''
FOR XML path('''');
结果如图:
4)实际应用:

SELECT USER_ACCOUNT AS '' 用户账户 '', USER_NAME AS '' 用户名 '', ORGANIZATION_NAME AS '' 组织''
, '' 角色 '' = REPLACE (REPLACE (REPLACE (STUFF ((
SELECT '','' + ROLE_NAME
FROM [dbo].[wapUserAndRole_20190612_b]
WHERE USER_ACCOUNT = a.USER_ACCOUNT
FOR XML path('''')
), 1, 1, ''''), '' 个人中心管理员,'', ''''), '', 个人中心管理员 '', ''''), '' 个人中心管理员 '', '''')
FROM [dbo].[wapUserAndRole_20190612_b] a
GROUP BY USER_ACCOUNT, USER_NAME, ORGANIZATION_NAME
ORDER BY ORGANIZATION_NAME;
外业人员信息查询

1 SELECT USER_ACCOUNT AS ''用户账户'', USER_NAME AS ''用户名'', ORGANIZATION_NAME AS ''组织''
2 , ''角色'' = REPLACE(REPLACE(REPLACE(STUFF((
3 SELECT '','' + ROLE_NAME
4 FROM [dbo].[wapUserAndRole_20190612_b]
5 WHERE USER_ACCOUNT = a.USER_ACCOUNT
6 FOR XML path('''')
7 ), 1, 1, ''''), ''个人中心管理员,'', ''''), '',个人中心管理员'', ''''), ''个人中心管理员'', '''')
8 FROM [dbo].[wapUserAndRole_20190612_b] a
9 GROUP BY USER_ACCOUNT, USER_NAME, ORGANIZATION_NAME
10 ORDER BY ORGANIZATION_NAME;

原文引自:https://www.cnblogs.com/hendrix/p/11012772.html
SQL Server中将多行的内容显示在一列中
SQL SERVER 2005支持XML格式数据,这个方法就是利用XML来进行转换。
SQL SERVER 2005支持XML格式数据,这个方法就是利用XML来进行转换。
STUFF(REPLACE(REPLACE((SELECT COL1 FROM [TABLE] N FOR XML AUTO ), ''
在查询语句后加FOR XML AUTO可以得到查询结果的xml类型格式为:
通过replace函数替换掉xml中结果以外的数据。
通过stuff函数将第一个节点替换的,去掉。
今天关于在SQL Server中动态将多行合并为多列和sql将多行数据合并为一行的讲解已经结束,谢谢您的阅读,如果想了解更多关于SQL 2005合并/将多行合并为一列、SQL Server 将一列多行数据合并为一行、SQL SERVER 将多行数据合并成一行(转)、SQL Server中将多行的内容显示在一列中的相关知识,请在本站搜索。
本文标签: