找回密码
 立即注册

QQ登录

只需一步,快速开始

Eric.Liang 讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2018-7-9 17:17  /   查看:7379  /  回复:3
本帖最后由 Eric.Liang 于 2018-7-9 17:20 编辑

自从4.0版本发布之后,视图功能广受大家的亲睐,通过手写SQL可以实现很多数据表无法实现的功能。最近刚好有用户给我提供了灵感。因为数据库的数据都是按列显示的,如果我想把它显示为几行应该怎么做呢?

或许之前的版本并不是那么容易实现,但是4.0版本视图的新增,无疑是给我们提供了更好的舞台。


先给大家看下效果:
blob36043089.png

怎么才可以把右侧表格中的数据动态显示成左侧的样式呢?请大家和我往下看。
模板demo以每行3个数据为例。通过SQL代码创建视图实现想要的样式。
SQL代码如下:
  1. WITH CTE AS(
  2. SELECT ID,(SELECT COUNT(*) FROM "表1" B  WHERE A.ID >= B.ID) AS ROWNUMBER,舱位号
  3. FROM "表1" AS A
  4. ),CTE1 AS (
  5. SELECT *,((ROWNUMBER+2) % 3) MOD3, (ROWNUMBER+2)/3 序号
  6. FROM CTE
  7. ),CTE2 AS (
  8. SELECT DISTINCT 序号
  9. FROM CTE1
  10. )
  11. SELECT 序号
  12. ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=0 AND 序号=CTE2.序号) 舱位号
  13. ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=1 AND 序号=CTE2.序号) 舱位号1
  14. ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=2 AND 序号=CTE2.序号) 舱位号2
  15. FROM CTE2
复制代码


当然,这只是一个例子,如果你想把这个demo做成通用的应该怎么做呢?
如果你想在每一行显示N个数据,参考代码如下:
  1. WITH CTE AS(
  2. SELECT ID,(SELECT COUNT(*) FROM "表1" B  WHERE A.ID >= B.ID) AS ROWNUMBER,舱位号
  3. FROM "表1" AS A
  4. ),CTE1 AS (
  5. SELECT *,((ROWNUMBER+N-1) % N) MOD3, (ROWNUMBER+N-1)/N 序号
  6. FROM CTE
  7. ),CTE2 AS (
  8. SELECT DISTINCT 序号
  9. FROM CTE1
  10. )
  11. SELECT 序号
  12. ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=0 AND 序号=CTE2.序号) 舱位号
  13. ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=1 AND 序号=CTE2.序号) 舱位号1
  14. ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=2 AND 序号=CTE2.序号) 舱位号2
  15. ,...
  16. ,...
  17. ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=N-1 AND 序号=CTE2.序号) 舱位号N-1
  18. FROM CTE2
复制代码


请注意这里:
blob397202147.png

相信大家在不断的学习中能够更好的运用活字格中的功能

工程文件见附件。

视图功能Demo.fgcc

522.01 KB, 下载次数: 842

评分

参与人数 1满意度 +5 收起 理由
firestarman + 5 神马都是浮云

查看全部评分

3 个回复

倒序浏览
hadwin
金牌服务用户   /  发表于:2018-7-10 09:36:51
沙发
厉害了!学习下
回复 使用道具 举报
Simon.hu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2018-7-10 09:54:35
板凳
都是精华帖!
回复 使用道具 举报
GrapeCity-LY
高级会员   /  发表于:2018-7-25 13:24:00
地板
好厉害,看起来真的有点复杂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部