Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多个列中显示来自同一列的数据,而不复制SQL Server_Sql_Sql Server - Fatal编程技术网

在多个列中显示来自同一列的数据,而不复制SQL Server

在多个列中显示来自同一列的数据,而不复制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

我在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
您需要先枚举这些值,然后再透视它们。以下是获得所需结果的一种方法:

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,但这不是目前的要求。最好将代码直接作为文本包含,而不是作为屏幕截图。