在多个列中显示来自同一列的数据,而不复制SQL Server
我在SQL Server中有一些数据,如下所示- Num Alphabet 1 A 1 B 2 C 2 D 2 E 3 F 数字字母表 1A 1b 2 C 二维 2e 3楼 你能帮我做一个SQL查询,显示如下数据- Alpha1 Alpha2 Alpha3 A C F B D E 字母1字母2字母3 A、C、F B-D E在多个列中显示来自同一列的数据,而不复制SQL Server,sql,sql-server,Sql,Sql Server,我在SQL Server中有一些数据,如下所示- Num Alphabet 1 A 1 B 2 C 2 D 2 E 3 F 数字字母表 1A 1b 2 C 二维 2e 3楼 你能帮我做一个SQL查询,显示如下数据- Alpha1 Alpha2 Alpha3 A C F B D E 字母1字母2字母3 A、C
您需要先枚举这些值,然后再透视它们。以下是获得所需结果的一种方法:
select max(case when num = 1 then alphabet end) as alpha1,
max(case when num = 2 then alphabet end) as alpha2,
max(case when num = 3 then alphabet end) as alpha3
from (select t.*, row_number() over (partition by num order by alphabet) as seqnum
from table t
) t
group by seqnum;
您可以通过使用子查询和GROUPBY子句来实现这一点:
select max(case when num = 1 then Alphabet end) as alpha1,
max(case when num = 2 then Alphabet end) as alph2,
max(case when num = 3 then Alphabet end) as alph3
from (select *, row_number()
over (partition by num order by alphabet) as output
from tblTemp) temp
group by output;
试试这个,它会处理你列中任意数量的字母 动态透视查询
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.[num])
FROM [YourTable] c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT num, ' + @cols + ' from
(
select num, Alphabet, ROW_NUMBER() over (PARTITION BY num order by Alphabet asc) as uid
from [YourTable]
) x
pivot
(
MIN(Alphabet)
for [uid] in (' + @cols + ')
) p '
execute(@query)
print @query
它背后的逻辑是什么?换句话说,字母1,[A,B]和字母2,[C,D,E]之间的关系是什么,。。。您是否缺少更多的表详细信息?关系是列-“Num”如果添加了新字母怎么办?@PravinDeshmukh。新的号码需要修改查询。我注意到这不是问题的一部分。Thanx,但这不是目前的要求。最好将代码直接作为文本包含,而不是作为屏幕截图。