当前位置: 代码迷 >> Sql Server >> SQL Sever非一般行转列
  详细解决方案

SQL Sever非一般行转列

热度:44   发布时间:2016-04-24 10:32:43.0
SQL Sever特殊行转列
本帖最后由 asd613613 于 2014-06-20 13:11:44 编辑
表结构如下:
FNumber                       FSeries  FItemID
M.QZ.AM.TL.00001   内牙  2010
B.QZ.AM.TL.00024   内牙       2010
B.QT.AM.TL.00022   内牙       2010
P.BJ.PL.00008          平螺母     2010
P.CY.QW.00001         球碗       2010
P.CY.QW.00002        球碗       2010
P.CY.SG.00054        内牙       2011
须要进行特殊行转列,如果如下:

  
内牙                                 球碗                       平螺母                      FItemID
M.QZ.AM.TL.00001           P.CY.QW.00001        P.BJ.PL.00008              2010
B.QZ.AM.TL.00024          P.CY.QW.00002                                              2010
B.QT.AM.TL.00022                                                                                2010
P.CY.SG.00054                                                                                      2011
不知有何种方法可以实现
@DBA_Huangzj 昨天大神给出的方法试了试,自己无法把ID套进去,求解


------解决方案--------------------
WITH test(FNumber,FSeries,FItemID)
AS
(
SELECT 'M.QZ.AM.TL.00001',N'内牙','2010' UNION ALL
SELECT 'B.QZ.AM.TL.00024',N'内牙','2010' UNION ALL
SELECT 'B.QT.AM.TL.00022',N'内牙','2010' UNION ALL
SELECT 'P.BJ.PL.00008',N'平螺母','2010' UNION ALL
SELECT 'P.CY.QW.00001',N'球碗','2010' UNION ALL
SELECT 'P.CY.QW.00002',N'球碗','2010' UNION ALL
SELECT 'P.CY.SG.00054',N'内牙','2011'
)
,test1 AS 
(
SELECT ROW_NUMBER() OVER(PARTITION BY FSeries ORDER BY GETDATE()) AS ID
,* 
FROM test
)
--SELECT * FROM test1
SELECT [内牙],[球碗],[平螺母],FItemID
FROM test1 AS A
PIVOT (MAX(FNumber) FOR FSeries IN([内牙],[球碗],[平螺母]))p
  相关解决方案