当前位置: 代码迷 >> Sql Server >> SQL Server行变换
  详细解决方案

SQL Server行变换

热度:48   发布时间:2016-04-24 10:32:27.0
SQL Server行转换
本帖最后由 asd613613 于 2014-06-19 10:08:17 编辑
现有表c:结构
  FNumber ,           FISeries
Nvarchar(50)          Nvarchar(50) 
数据为:
P.BJ.CX.00003 插销
P.BJ.KC.00006 开槽螺母
P.BJ.YZ.00001 油嘴
P.XJ.FT.00019 防尘套
P.SL.FC.00001 防尘罩
P.BJ.PL.00008 平螺母
P.CY.QW.00001 球碗
P.CY.QW.00002 球碗
P.KH.TD.00011 弹垫
P.CY.SG.00054 上盖
B.QZ.AM.TL.00024 内牙
B.QT.AM.TL.00022 内牙
M.QT.AM.BJ.00281 拨叉
M.QZ.AM.TL.00001 内牙
须要进行 行转列操作得到如下结果:

 开槽螺母             油嘴                      防尘套                 防尘罩             内牙                                                                                            
     P.BJ.YZ.00001   P.XJ.FT.00019  P.SL.FC.00001    M.QZ.AM.TL.00001     P.CY.QW.00001
             \                               \                              \                                  \                    B.QZ.AM.TL.00024     
                 \                   \                                     \                                  \                 B.QT.AM.TL.00022
请问有没有办法实现这样的行转列?
------解决方案--------------------
如果能估算,就这样写,不过不能估算的话我也不知道怎么搞,可能需要前端来协助实现。
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-06-19 10:44:04
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
-- Apr  2 2010 15:48:46 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([FNumber] nvarchar(32),[FISeries] nvarchar(6))
insert [huang]
select 'M.QZ.AM.TL.00001',N'内牙' union all
select 'B.QZ.AM.TL.00024',N'内牙' union all
select 'B.QT.AM.TL.00022',N'内牙' union all
select 'P.BJ.PL.00008',N'平螺母' union all
select 'P.CY.QW.00001',N'球碗' union all
select 'P.CY.QW.00002',N'球碗'
--------------生成数据--------------------------



SELECT ISNULL([内牙],'\')[内牙],ISNULL([平螺母],'\')[平螺母]
FROM 
(SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())id, fnumber AS N'内牙'
FROM huang 
WHERE [FISeries]=N'内牙')a full JOIN (SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())id, fnumber AS N'平螺母'
FROM huang 
WHERE [FISeries]=N'平螺母') b ON a.id=b.id



----------------结果----------------------------
/* 
内牙                               平螺母
-------------------------------- --------------------------------
M.QZ.AM.TL.00001                 P.BJ.PL.00008
B.QZ.AM.TL.00024                 \
B.QT.AM.TL.00022                 \
  相关解决方案