2014-01-30 83 views
1

我有一个Order表在这个项目作为将多个订单列数分为单列

OrderNo, ProductCode 

,他们分别指OrderDetailsProductDetails表的详细信息。

单个Order可以容纳多个产品(比如说最大4个),但对于每个订购的产品都有单独的行。

因此,数据可能是这样的:

OrderNo ProductCode 
--------------------  
    1  Gadget1 
    1  CaseCover1 
    1  Cable1 

我有一个显示报告,它看起来像一个要求:

OrderNo ProductName1 ProductName2 ProductName3 ProductName4 
    1  Gadget1  CaseCover1  Cable1   NULL 

它不是串联,但显示不同的列。

请帮助我,我该如何实现最小或无连接。 (这里的目标是尽可能快地运行查询,有成千上万的订单记录,插入和选择每秒发生一次。)

非常感谢。

+0

产品详细了产品代码和产品名称为列 – iTSrAVIE

+0

去枢... –

+0

@iTSrAVIE我的答案是否适合你?如果是这样,请标记答案。 – DhruvJoshi

回答

0

使用PIVOT和Row_Number()函数我们可以实现这一点。见下面

SELECT [OrderNo],[1] as Product1 ,[2] as Product2,[3] as Product3,[4] as Product4 FROM 
(
SELECT 
[OrderNo], 
Row_Number() OVER (PARTITION BY [OrderNo] ORDER BY ProductCode desc)as ProductNumber, 
[ProductCode] FROM [Order] 
) Source 
PIVOT 

( 
MAX(ProductCode) FOR ProductNumber in ([1],[2],[3],[4]) 
)Pivottable 

看到输出图像enter image description here

查询,这里是我的订单表怎么看起来像enter image description here