求助!SQL表只有两列,怎么纵变横啊?

penny的世界 2018-02-09 09:24:18
大神们,请赐教,在线等!
SQL表只有两列,怎么怎么纵变横啊?
...全文
491 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-02-09
  • 打赏
  • 举报
回复
引用 6 楼 weixin_39090416 的回复:
是按照你说的写的呢,可是1,2,3,4,5的顺序不对
看一下name值是什么
penny的世界 2018-02-09
  • 打赏
  • 举报
回复
是按照你说的写的呢,可是1,2,3,4,5的顺序不对
二月十六 2018-02-09
  • 打赏
  • 举报
回复
把查询出来的结果,作为临时表数据,然后加上上边的语句,就可以了; 或者这样,我帮你写 建议楼主列出表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
penny的世界 2018-02-09
  • 打赏
  • 举报
回复
谢谢回复。我的是SQL server. 我的原始数据是这样的: 然后我用以下SQL取了前5项,得到纵表: select MFG_LOT_NO,ERR_MODE_CD from (select t.*,row_number() over(partition by MFG_LOT_NO order by NG_ERR_PCS_CNT desc) as fnum from V_NFT_LotsResultAllErrmode T) t1 where fnum <=5 order by MFG_LOT_NO,NG_ERR_PCS_CNT desc,CONVERT(int,ERR_MODE_CD) desc 最后就是不知道怎么能横着排列?
二月十六 2018-02-09
  • 打赏
  • 举报
回复
试了一下可以,可能是表结构数据不一样;

--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([MDF_LOT_NO] int,[ERP_MODE_CD] int)
Insert #T
select 1017111,5 union all
select 1017111,41 union ALL
select 1017111,14 union ALL
select 1017111,57 union ALL
select 1017111,44 union all
select 1128011,41 union all
select 1128011,26 union all
select 1128011,100 union all
select 1128011,44 union all
select 1128011,7
Go
--测试数据结束
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY MDF_LOT_NO ORDER BY GETDATE() ) AS rn
FROM #T
)
SELECT @name =stuff((SELECT DISTINCT ',['+RTRIM(rn)+']' from cte for xml PATH('')),1,1,'')
SET @sql =';WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY MDF_LOT_NO ORDER BY GETDATE() ) AS rn
FROM #T
)'
set @sql =@sql+'SELECT * from cte pivot(max([ERP_MODE_CD])for rn in('+@name+'))a'
PRINT @sql
EXEC( @sql)





建议楼主列出表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
penny的世界 2018-02-09
  • 打赏
  • 举报
回复
谢谢解答,我刚按您的方法试了下,怎么没有按照1,2,3,4,5的顺序排列呢?
二月十六 2018-02-09
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([MDF_LOT_NO] int,[ERP_MODE_CD] int)
Insert #T
select 1017111,5 union all
select 1017111,41 union all
select 1128011,41 union all
select 1128011,26
Go
--测试数据结束
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY MDF_LOT_NO ORDER BY GETDATE() ) AS rn
FROM #T
)
SELECT @name =stuff((SELECT DISTINCT ',['+RTRIM(rn)+']' from cte for xml PATH('')),1,1,'')
SET @sql =';WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY MDF_LOT_NO ORDER BY GETDATE() ) AS rn
FROM #T
)'
set @sql =@sql+'SELECT * from cte pivot(max([ERP_MODE_CD])for rn in('+@name+'))a'
PRINT @sql
EXEC( @sql)


penny的世界 2018-02-09
  • 打赏
  • 举报
回复
已解决,谢谢!

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧