求教,求教

你的心思,我读不懂 2019-05-05 02:54:15


大佬们,我这个应该怎么弄,我想把这个分成几列来显示
...全文
166 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
感谢两位老哥的帮助,已经解决了
RINK_1 2019-05-06
  • 打赏
  • 举报
回复


DECLARE @SQL VARCHAR(MAX)

WITH CTE_1 
AS
(SELECT Fltemid,FNUMBER FROM #T WHERE FPARENTID=0
 UNION ALL
 SELECT FPARENTID,FNUMBER FROM #T WHERE FPARENTID<>0),

CTE_2
AS
(SELECT *,ROW_NUMBER() OVER (PARTITION BY Fltemid ORDER BY FNUMBER) AS SEQ  FROM CTE_1)

SELECT @SQL=ISNULL(@SQL+',','')+'MAX(CASE WHEN SEQ='+CAST(SEQ AS VARCHAR)+' THEN FNUMBER ELSE '''' END) AS FNUMBER_'+CAST(SEQ AS VARCHAR)
FROM CTE_2
GROUP BY SEQ

SET @SQL='WITH CTE_1 
AS
(SELECT Fltemid,FNUMBER FROM #T WHERE FPARENTID=0
 UNION ALL
 SELECT FPARENTID,FNUMBER FROM #T WHERE FPARENTID<>0),

CTE_2
AS
(SELECT *,ROW_NUMBER() OVER (PARTITION BY Fltemid ORDER BY FNUMBER) AS SEQ  FROM CTE_1)

SELECT Fltemid,'+@SQL+' FROM CTE_2 GROUP BY Fltemid'

EXEC(@SQL)


  • 打赏
  • 举报
回复
引用 6 楼 Dear SQL 的回复:

  if not object_id('Class') is null
    drop table Class
Go
Create table Class(Fltemid INT ,FNumber nvarchar(50),[FParentid]INT,[FLevel] INT  ,[Fdetail] int)
Insert Class
select 1497,N'102EU',0,1,0 union all
select 1507,N'102EU.0002',1497,2,1 union all
select 1508,N'102EU.0003',1497,2,1 union all
select 1017,N'102UK',0,1,0 union all
select 1019,N'102UK.0001',1017,2,1 union all
select 1190,N'102UK.0002',1017,2,1 union all
select 1191,N'102UK.0003',1017,2,1 

;
with list as(
	select * ,rid=ROW_NUMBER()over(partition by left(fnumber,4) order by fnumber)
	from Class
)
select *
from list pivot(max(fnumber) for rid in([1],[2],[3],[4]))pt


(1 行受影响)
Fltemid     FParentid   FLevel      Fdetail     1                                                  2                                                  3                                                  4
----------- ----------- ----------- ----------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
1017        0           1           0           102UK                                              NULL                                               NULL                                               NULL
1019        1017        2           1           NULL                                               102UK.0001                                         NULL                                               NULL
1190        1017        2           1           NULL                                               NULL                                               102UK.0002                                         NULL
1191        1017        2           1           NULL                                               NULL                                               NULL                                               102UK.0003
1497        0           1           0           102EU                                              NULL                                               NULL                                               NULL
1507        1497        2           1           NULL                                               102EU.0002                                         NULL                                               NULL
1508        1497        2           1           NULL                                               NULL                                               102EU.0003                                         NULL

(7 行受影响)

大佬,像这种一个父子级的能不能在一行显示
Dear SQL(燊) 2019-05-05
  • 打赏
  • 举报
回复

  if not object_id('Class') is null
    drop table Class
Go
Create table Class(Fltemid INT ,FNumber nvarchar(50),[FParentid]INT,[FLevel] INT  ,[Fdetail] int)
Insert Class
select 1497,N'102EU',0,1,0 union all
select 1507,N'102EU.0002',1497,2,1 union all
select 1508,N'102EU.0003',1497,2,1 union all
select 1017,N'102UK',0,1,0 union all
select 1019,N'102UK.0001',1017,2,1 union all
select 1190,N'102UK.0002',1017,2,1 union all
select 1191,N'102UK.0003',1017,2,1 

;
with list as(
	select * ,rid=ROW_NUMBER()over(partition by left(fnumber,4) order by fnumber)
	from Class
)
select *
from list pivot(max(fnumber) for rid in([1],[2],[3],[4]))pt


(1 行受影响)
Fltemid     FParentid   FLevel      Fdetail     1                                                  2                                                  3                                                  4
----------- ----------- ----------- ----------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
1017        0           1           0           102UK                                              NULL                                               NULL                                               NULL
1019        1017        2           1           NULL                                               102UK.0001                                         NULL                                               NULL
1190        1017        2           1           NULL                                               NULL                                               102UK.0002                                         NULL
1191        1017        2           1           NULL                                               NULL                                               NULL                                               102UK.0003
1497        0           1           0           102EU                                              NULL                                               NULL                                               NULL
1507        1497        2           1           NULL                                               102EU.0002                                         NULL                                               NULL
1508        1497        2           1           NULL                                               NULL                                               102EU.0003                                         NULL

(7 行受影响)

  • 打赏
  • 举报
回复
3#是测试数据,四楼是结果,各位大佬,可以粗来解惑了
  • 打赏
  • 举报
回复
这个是我想要的结果,如果能把结果显示到一行就更好了。
  • 打赏
  • 举报
回复
if not object_id('Class') is null drop table Class Go Create table Class(Fltemid INT ,FNumber nvarchar(50),[FParentid]INT,[FLevel] INT ,[Fdetail] int) Insert Class select 1497,N'102EU',0,1,0 union all select 1507,N'102EU.0002',1497,2,1 union all select 1508,N'102EU.0003',1497,2,1 union all select 1017,N'102UK',0,1,0 union all select 1019,N'102UK.0001',1017,2,1 union all select 1190,N'102UK.0002',1017,2,1 union all select 1191,N'102UK.0003',1017,2,1
Dear SQL(燊) 2019-05-05
  • 打赏
  • 举报
回复
给出你的测试数据和想要的结果,不要图片要文本
  • 打赏
  • 举报
回复
来个大佬解决下啊

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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