行转列 或 转置问题

需求:

ID              sigma          cpk            Xbar       
1            sigma值          cpk值          xbar值
2            sigma值          cpk值          xbar值
.              .
.              .
.              .
n            sigma值N

我有很多条数据且ID不会重复
但是要显示成下面格式:
ID            1          2        ....      N
sigma      sigma值    sigma值        ....  sigma值N
cpk        cpk值      cpk值
Xbar        xbar值    xbar值

------------------------------------------------------------------------------------------

SQL code
  
  
use test go -- > --> (Andy)生成测试数据 2008-09-15 Set Nocount On If Object_id ( ' Test ' ) Is Not null Drop Table Test Go Create table Test ( [ ID ] int , [ sigma ] nvarchar ( 50 ), [ cpk ] nvarchar ( 50 ), [ Xbar ] nvarchar ( 50 )) Insert Into Test select 1 ,N ' sigma值 ' ,N ' cpk值 ' ,N ' xbar值 ' union all select 2 ,N ' sigma值 ' ,N ' cpk值 ' ,N ' xbar值 ' Declare @Sql nvarchar ( max ) Select @Sql = Isnull ( @Sql + ' , ' , '' ) + Quotename ( [ ID ] ) From Test Group By [ ID ] Exec (N ' ;With t As ( Select * from Test Unpivot ([Value] For Col In([sigma],[cpk],[Xbar])) UnP ) Select ID=Col, ' + @Sql + ' From t Pivot(Max([Value]) For ID in( ' + @Sql + ' )) P ' ) /* ID 1 2 -------------------------- cpk cpk值 cpk值 sigma sigma值 sigma值 Xbar xbar值 xbar值 */
------------------------------------------------------------ 当原表的类型不同时,会出现“类型与 UNPIVOT 列表中指定的其他列的类型冲突。”这时可以创建一个临时表(类型必须一致)来保存原表的数据
  
  
  1. Set Nocount On
  2. If Object_id('#tb') Is Not null
  3.  drop table #tb
  4. declare @1 table([ID] int,[sigma] int,[cpk] nvarchar(50),[Xbar] nvarchar(50))
  5. Insert @1
  6. select 1,3,N'cpk',N'xbar' union all
  7. select 9,3,N'cpk',N'xbar' union all
  8. select 5,3,N'cpk',N'xbar'
  9. ;
  10. create table #tb([ID] int IDENTITY(1,1),[sigma] nvarchar(50),[cpk] nvarchar(50),[Xbar] nvarchar(50))
  11. insert into #tb ([sigma],[cpk],[Xbar]) 
  12. Select [sigma],[cpk],[Xbar] from @1 where [sigma]=3
  13. Declare @Sql nvarchar(max)
  14. Select @Sql=Isnull(@Sql+',','')+Quotename([ID])
  15.     From #tb Group By [ID]
  16. Exec (N'
  17. ;With t As
  18. (
  19.     Select * from #tb 
  20.     Unpivot ([Value] For Col In([cpk],[sigma],[Xbar])) UnP 
  21. )
  22. Select ID=Col,'+@Sql+' From t
  23. Pivot(Max([Value]) For ID in('+@Sql+')) P order by charindex(Col,''Xbar,cpk,sigma'')
  24. ')
  25. drop table #tb
 ---order by charindex(Col,''Xbar,cpk,sigma'')是为了实现自定义排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Excel的行转换为,有几种方法可以实现。第一种方法是在新版Excel使用复制和粘贴功能来实现。你可以选择要转置的区域,然后使用选择性粘贴功能,并勾选“转置”选项,这样就可以直接将行转换为。这种方法在低版本的Excel或非静态数据表可能不适用。 第二种方法是使用INDEX函数来实现。你可以在一个单元格输入以下公式:=INDEX($A$1:$F$12, COLUMN()-7, ROW())。通过使用动态的号COLUMN()和动态的行号ROW(),这个公式可以自动扩展以实现行转换。你只需要向右或向下拖动这个公式,就可以完成行转换。这个方法适用于各种版本的Excel。 第三种方法是使用INDIRECT函数来解析和拼接字符串来实现。你可以在目标区域的一个单元格输入以下公式:=INDIRECT("$B" & COLUMN()-7)。这个公式可以根据动态的号将行转换为。注意,在表示单元格的前半部分$B之前要加上英文状态的双引号,以确保它被识别为字符串,否则会导致公式错误。 这些方法都可以帮助你将Excel的行转换为,具体选择哪种方法取决于你的需求和Excel的版本。<span class="em">1</span> #### 引用[.reference_title] - *1* [Excel实现行转换的三种方式](https://blog.csdn.net/ybw_wang/article/details/119385403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值