DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: Fainernal
今日帖子: 12
在线用户: 51
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 moom (小新啊) ▲△△△△ -
注册会员
2018/8/18 19:24:06
标题:
如何SQL分组后把附属数据分列显示? 浏览:451
加入我的收藏
楼主: 如 表 名:   AA
字段名:      主类       子类
  数值:     轮胎类    单车胎
          轮胎类    汽车胎
          灯泡类    小汽车前灯
          灯泡类    小汽车后灯
          灯泡类    摩托车转向灯


我要在 DBGRID 显示效果如下:

标题栏 :   轮胎类     灯泡类
数值:     单车胎    小汽车前灯
.       汽车胎    小汽车后灯
.          .   摩托车转向灯

请问如何实现 ? 有没有 SQL 语法 可以实现?

谢谢各位....
----------------------------------------------
谢谢各位大大
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/8/18 20:47:52
1楼: 行转列,这个数据库知识,我没学过。帮你顶一下。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 lesuif (Levin) ▲▲▲△△ -
注册会员
2018/8/18 22:06:49
2楼: SQL Server 吗?
----------------------------------------------
-
作者:
男 lesuif (Levin) ▲▲▲△△ -
注册会员
2018/8/18 22:10:22
3楼: CREATE TABLE #AA(
  主类 VARCHAR(50),
  子类 VARCHAR(50),
  )
  
INSERT INTO #AA(主类, 子类)
SELECT '轮胎类','单车胎'
UNION ALL SELECT '轮胎类','汽车胎'
UNION ALL SELECT '灯泡类','小汽车前灯'
UNION ALL SELECT '灯泡类','小汽车后灯'
UNION ALL SELECT '灯泡类','摩托车转向灯'

--==========

SELECT DENSE_RANK() OVER(ORDER BY 主类 ) id,
  DENSE_RANK() OVER(PARTITION BY 主类 ORDER BY 子类) Sub_id,*
INTO #tempAA
FROM #AA

SELECT Sub_id
INTO #temp_Sub
FROM #tempAA
GROUP BY Sub_id

DECLARE @id INT, @Maxid INT,@FieldName SYSNAME, @Sql VARCHAR(MAX)
SELECT @id=ISNULL(MIN(id), 1),@Maxid=ISNULL(MAX(id), 0)
FROM #tempAA

WHILE @id<=@Maxid
BEGIN
  SELECT TOP 1 @FieldName=主类
  FROM #tempAA
  WHERE Id=@id
  
  SET @Sql=
  'ALTER TABLE #temp_Sub ADD ' + @FieldName + ' VARCHAR(50)'
  ----'ALTER TABLE #temp_Sub ADD 主类' + CAST(@id AS VARCHAR) + ' VARCHAR(50)'
  PRINT @Sql
  EXEC(@Sql)
  
  SET @Sql=
  'UPDATE a SET a.' + @FieldName + '=b.子类
   FROM #temp_Sub a
   INNER JOIN #tempAA b ON a.Sub_id=b.Sub_id
   WHERE b.Id=' + CAST(@id AS VARCHAR)
  PRINT @Sql
  EXEC(@Sql)
  
  SET @id=@id+1
END

SELECT * FROM #temp_Sub
此帖子包含附件:
PNG 图像
大小:13.9K
----------------------------------------------
-
作者:
男 moom (小新啊) ▲△△△△ -
注册会员
2018/8/18 22:51:46
4楼: 哇.......ooooooo
----------------------------------------------
谢谢各位大大
作者:
男 bahamut8348 (leonna) ▲▲▲▲▲ -
普通会员
2018/8/19 1:58:50
5楼: 这个是固定行转列么?如果是固定行的话,直接写就完了,哪需要搞那么复杂。临时表都用出来了。
----------------------------------------------
--
作者:
男 moom (小新啊) ▲△△△△ -
注册会员
2018/8/19 10:32:15
6楼: 楼上可否指点一二?
----------------------------------------------
谢谢各位大大
作者:
男 bahamut8348 (leonna) ▲▲▲▲▲ -
普通会员
2018/8/19 12:01:36
7楼: 首先确定是否固定行转固定列。
其次那个数值到底是什么东西?

如果撇开那个数值,你这样的行转列有什么意义么?
----------------------------------------------
--
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行46.875毫秒 RSS