Foxtable(狐表)用户栏目专家坐堂 → 狐表不支持纵向表转横向表?(分享LXL版主SQL纵转横代码)


  共有22747人关注过本帖树形打印复制链接

主题:狐表不支持纵向表转横向表?(分享LXL版主SQL纵转横代码)

帅哥哟,离线,有人找我吗?
czy
  31楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/1/10 14:47:00 [只看该作者]

一个简单的示例(满不满足要求另说了)。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目5.table


 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  32楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/1/10 17:06:00 [只看该作者]

以下是引用czy在2010-1-10 14:17:00的发言:
感觉这样好象有点累,每次增删临时表,何不保留这个表,这样可以省去一些不必要的操作。

一、每个患者出院只打印一张piao据,打完就没用了。数据统计只需要用到表B即可。
二、这个表的列根据表A的费别动态改变。如何保留?

[此贴子已经被作者于2010-1-10 17:07:12编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  33楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/1/10 17:08:00 [只看该作者]

我让你说糊涂了。
你之前是说要全部生成这些列。

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  34楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/1/10 17:21:00 [只看该作者]

图片点击可在新窗口打开查看列是要全部生成啊,根据表A生成嘛。数据行只要一行就够了。


图片点击可在新窗口打开查看不过您的示例已经给了我很大启发。谢谢咯。

思路基本有了,现在看LXL版主能否解决SQL上的纵变横问题,如果能就用后台数据的方法走您的思路。
[此贴子已经被作者于2010-1-10 17:24:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  35楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/1/10 18:27:00 [只看该作者]

这样看看行不行?

if e.Form.Controls("TextBox1").Value = "" OrElse e.Form.Controls("TextBox2").Value = "" Then
    MessageBox.Show("起付金额和报销比例不能为空!","提示",MessageBoxButtons.Ok,MessageBoxIcon.Information)
    Return
End If
Dim r As Row = Tables("表B").Current
Tables("临时数据行").Rows(0)("编码") = r("编码")
Dim b As New SQLGroupTableBuilder("统计","表B")
'b.ConnectionName  = "数据源"
b.AddTable("表B","费别序号","表A","序号")
b.AddCols("表A","费别")
b.Groups.AddDef("编码")
b.Groups.AddDef("费别序号")
b.Totals.AddExp("金额","[数量]*[单价]")
b.Totals.AddExp("自费金额","[数量]*[单价]*[参数]")
b.Totals.AddExp("统筹金额","[数量]*[单价]-([数量]*[单价]*[参数])")
b.Filter = "[编码] = '" & r("编码") & "'"
b.TableVisible = False
b.Build
Dim b1 As New SQLCrossTableBuilder("统计表","表A")
b1.AddTable("表A","序号","表B","费别序号")
b1.AddCols("表A","费别")
b1.AddCols("表B","编码")
b1.AddCols("表B","金额")
b1.HGroups.AddDef("编码")
b1.VGroups.AddDef("费别")
b1.Totals.AddDef("金额")
b1.HorizontalTotal = True
b1.Filter = "[编码] = '" & r("编码") & "'"
b1.Build
With DataTables("统计表")
    .DataCols.Add("报销金额", GetType(Single))
    .DataCols.Add("自付金额", GetType(Double), "[合计]-[报销金额]")
End With
Dim dt As DataTable = DataTables("统计")
Tables("统计表").Rows(0)("报销金额") = (dt.Compute("Sum(统筹金额)")-e.Form.Controls("TextBox1").Value)*e.Form.Controls("TextBox2").Value
[此贴子已经被作者于2010-1-10 18:28:33编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  36楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/1/10 23:39:00 [只看该作者]

以下是引用czy在2010-1-10 18:27:00的发言:
这样看看行不行?

图片点击可在新窗口打开查看列数不够,表B缺少的费别没出来。


 回到顶部
帅哥哟,离线,有人找我吗?
czy
  37楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/1/11 0:11:00 [只看该作者]

我算是理解不了了,到现在到底需要哪些列我都没搞明白。
呵呵,不瞎参和了。

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  38楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/1/11 0:26:00 [只看该作者]

以下是引用czy在2010-1-11 0:11:00的发言:
我算是理解不了了,到现在到底需要哪些列我都没搞明白。
呵呵,不瞎参和了。

图片点击可在新窗口打开查看就是表A基础表费别有多少种就有多少列,与某患者有几种费别无关,因为患者产生的费别种数肯定是<=表A的费别种数。此患者没有的费别自然是设置为0。该列还是需要显示的。


C版,没关系,我不是说了嘛,您的示例已经给了我思路,代码不是十分重要。

[此贴子已经被作者于2010-1-11 0:28:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  39楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/1/11 22:42:00 [只看该作者]

图片点击可在新窗口打开查看LXL版主解决这个问题了,只是不懂在狐表中调用存储过程。。。。

CREATE PROCEDURE jsd
AS
declare @sql varchar(8000)
set @sql = 'select 住院序号'
select @sql = @sql + ',Sum(case 收费类别 when ''' + 收费类别 + ''' then 结算金额 else 0 end) as [' + 收费类别 + ']'
from (select distinct 收费类别 from dbo.F费用类别) as c
set @sql = @sql + ' from
(select a.住院序号,a.结算金额,b.收费类别 from 结算单 a
join F费用类别 b on a.费用类别= b.编码) as d
group by 住院序号'
exec (@sql)
return
GO


我在用Fill时报错,不知道为什么?
Tables("窗口3_Table1").Fill("exec jsd","Yasys",false)

现在知道了,原来是False的问题,应该True才对。
[此贴子已经被作者于2010-1-11 23:17:01编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  40楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/1/12 0:05:00 [只看该作者]

又有新的问题,如果有变量怎么不行?

CREATE PROCEDURE jsd
@js nvarchar(6)
AS
declare @sql varchar(8000)
set @sql = 'select 住院序号'
select @sql = @sql + ',Sum(case 收费类别 when ''' + 收费类别 + ''' then 结算金额 else 0 end) as [' + 收费类别 + ']'
from (select distinct 收费类别 from dbo.F费用类别) as c
set @sql = @sql + ' from
(select a.住院序号,a.结算金额,b.收费类别 from 结算单 a
join F费用类别 b on a.费用类别= b.编码 where 住院序号 = @js) as d
group by 住院序号'
print (@sql)
return
GO

 回到顶部
总数 40 上一页 1 2 3 4