Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 Server_Sql Server 2005_Transpose - Fatal编程技术网

在SQL-SERVER中将数据文件从行重塑为列

在SQL-SERVER中将数据文件从行重塑为列,sql-server,sql-server-2005,transpose,Sql Server,Sql Server 2005,Transpose,我有一个查询,返回一个包含两列的数据集,如下所示: -------------------------- |spec-number|project | |-----------|-----------| |649841 |A | |649841 |B | |649841 |D | |84709 |E | |84709 |B | |84709 |C

我有一个查询,返回一个包含两列的数据集,如下所示:

--------------------------
|spec-number|project    |
|-----------|-----------|
|649841     |A          |
|649841     |B          |
|649841     |D          |
|84709      |E          |
|84709      |B          |
|84709      |C          |
|84709      |K          |
-------------------------
规范编号可能涉及的项目数量可能是无限的

我希望结果是:

-------------------------------------------------
|spec-number|project1|project2|project3|project4|
|-----------|--------|--------|--------|--------|  
|649841     |A       |B       |D       |        | 
|84709      |E       |B       |C       |K       |
-------------------------------------------------
我尝试过旋转,但它只是给了我一个按规格编号的项目交叉表。
任何帮助都将不胜感激

如果希望将它们作为单独的列,则可以计算项目编号并将其用于旋转。下面使用group by方法进行聚合:

select spec_num,
       max(case when seqnum = 1 then project end) as project1,
       max(case when seqnum = 2 then project end) as project2,
       max(case when seqnum = 3 then project end) as project3,
       max(case when seqnum = 4 then project end) as project4
from (select t.*,
             row_number() over (partition by spec_number order by project) as seqnum
      from t
     ) t
group by spec_num;

如果需要可变的列数,那么必须使用动态SQL。如果您愿意,也可以将其表述为pivot查询。

谢谢。快到了!可能存在数量可变的项目列。您能给我举一个您正在谈论的动态sql代码的例子吗?下面是一个例子:。