1

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

--------------------------
|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       |
-------------------------------------------------

我尝试了旋转,但它只是给了我一个按规格编号的项目交叉表。任何帮助将不胜感激!

4

1 回答 1

0

如果您希望它们作为单独的列,那么您可以计算项目编号并将其用于旋转。下面使用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如果您愿意,也可以将其表述为查询。

于 2013-09-11T01:51:24.000 回答