SQL,同一列不同的行到同一行的不同列

时间:2013-11-19 15:17:58

标签: sql sql-server

我试图用SQL实现这一点。

表格如下:

SerialNo    part    location
12345       aaa     R1
12345       bbb     R2
67890       ccc     R3
67890       ddd     R4
12345       eee     R5

我想得到:

SerialNo    Part1   Location1   Part2   Location2   Part3   Location3
12345       aaa     R1          bbb     R2          eee     R5
67890       ccc     R3          ddd     R4      

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

我会说这在SQL中是不可能的;这是非常糟糕的风格。

主要问题是SQL有预定义的列数,而你的"表"没有 - 没有上限。

因此,通常情况下,您将获取数据ORDER BY sn,然后使用执行脚本/程序对其进行相应格式化。

为了帮助您,我们需要了解您所需的脚本/编程语言。

答案 1 :(得分:0)

你可以试试枢轴。在我的例子中,我将部分和位置连接在一起,因为我不知道如何使用两列来完成此操作。这不是一个好的风格仍然存在,但也许这会帮助你一点点。

我在我的例子中命名了你的表ttt:

select 'serialno' as serialno
     , [1], [2], [3], [4], [5]
from
( select ROW_NUMBER() over (partition by serialno order by part + ' - ' + location) as rn 
       , serialno
       , (part + ' - ' + location) as pl
    from ttt ) as sourcetable
  pivot ( 
    max(pl) 
    for rn in ([1], [2], [3], [4], [5])
    )  as pivottable

enter image description here

你可以看到我只提供了五个插槽。你可以添加更多,如果你喜欢,但总会有固定的数量

相关问题