本帖最后由 Eric.Liang 于 2018-7-9 17:20 编辑
自从4.0版本发布之后,视图功能广受大家的亲睐,通过手写SQL可以实现很多数据表无法实现的功能。最近刚好有用户给我提供了灵感。因为数据库的数据都是按列显示的,如果我想把它显示为几行应该怎么做呢?
或许之前的版本并不是那么容易实现,但是4.0版本视图的新增,无疑是给我们提供了更好的舞台。
先给大家看下效果:
怎么才可以把右侧表格中的数据动态显示成左侧的样式呢?请大家和我往下看。
模板demo以每行3个数据为例。通过SQL代码创建视图实现想要的样式。
SQL代码如下:
- WITH CTE AS(
- SELECT ID,(SELECT COUNT(*) FROM "表1" B WHERE A.ID >= B.ID) AS ROWNUMBER,舱位号
- FROM "表1" AS A
- ),CTE1 AS (
- SELECT *,((ROWNUMBER+2) % 3) MOD3, (ROWNUMBER+2)/3 序号
- FROM CTE
- ),CTE2 AS (
- SELECT DISTINCT 序号
- FROM CTE1
- )
- SELECT 序号
- ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=0 AND 序号=CTE2.序号) 舱位号
- ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=1 AND 序号=CTE2.序号) 舱位号1
- ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=2 AND 序号=CTE2.序号) 舱位号2
- FROM CTE2
复制代码
当然,这只是一个例子,如果你想把这个demo做成通用的应该怎么做呢?
如果你想在每一行显示N个数据,参考代码如下:
- WITH CTE AS(
- SELECT ID,(SELECT COUNT(*) FROM "表1" B WHERE A.ID >= B.ID) AS ROWNUMBER,舱位号
- FROM "表1" AS A
- ),CTE1 AS (
- SELECT *,((ROWNUMBER+N-1) % N) MOD3, (ROWNUMBER+N-1)/N 序号
- FROM CTE
- ),CTE2 AS (
- SELECT DISTINCT 序号
- FROM CTE1
- )
- SELECT 序号
- ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=0 AND 序号=CTE2.序号) 舱位号
- ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=1 AND 序号=CTE2.序号) 舱位号1
- ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=2 AND 序号=CTE2.序号) 舱位号2
- ,...
- ,...
- ,(SELECT 舱位号 FROM CTE1 WHERE MOD3=N-1 AND 序号=CTE2.序号) 舱位号N-1
- FROM CTE2
复制代码
请注意这里:
相信大家在不断的学习中能够更好的运用活字格中的功能
工程文件见附件。
|
|