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


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

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

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


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

图片点击可在新窗口打开查看我搞错了。C版看21楼。。。我现在缺少一个好的设计思路。有没有好建议?
只要能生成一行这样数据。
 
图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.png
图片点击可在新窗口打开查看

另外有没有LXL版主的联系QQ或者邮箱?
[此贴子已经被作者于2010-1-9 19:24:07编辑过]

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/1/9 19:59:00 [显示全部帖子]

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

您看看这个示例吧,我想不出设计思路,我要整体过程的思路哦,不用写代码给我(如果有时间写那更好图片点击可在新窗口打开查看)。

基础表只有三个,
第一个过程:

由表A和表B生成数据写入表C,其中

自费金额=SUM(数量*单价*参数)       统筹金额=SUM(数量*单价-自费金额)

第二个过程:红色部分需要手工输入数值)主要是这个确定按钮代码

由表A/表B/表C生成临时数据行进行打印,其中

合计=SUM(数量*单价)

报销金额=(统筹金额-起付金额)*报销比例

自付金额=合计-报销金额
[此贴子已经被作者于2010-1-9 20:02:14编辑过]

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/1/10 11:50:00 [显示全部帖子]

以下是引用xl在2010-1-9 20:54:00的发言:

lxl很忙电子邮件联系:
jiabiao@yeah.net

谢谢XL兄图片点击可在新窗口打开查看


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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/1/10 12:32:00 [显示全部帖子]

以下是引用mr725在2010-1-9 23:30:00的发言:
思路不一定好,但能达到要求:

 

在表B中增加: 金额、自费金额、统筹金额 三列(可以是临时列) : 这样可以不要表C了! 

for tzj as integer = 0 to tables("表B").count -1

    tables("表B")(tzj,"金额") = tables("表B")(tzj,"单价")*tables("表B")(tzj,"数量")

    tables("表B")(tzj,"自费金额") = tables("表B")(tzj,"单价")*tables("表B")(tzj,"数量")*tables("表B")(tzj,"参数")

    tables("表B")(tzj,"统筹金额") = tables("表B")(tzj,"单价")*tables("表B")(tzj,"数量")-tables("表B")(tzj,"自费金额")

next


【如果一定要表C,下面代码稍加修改也可以的】
 

表A窗口按钮:

dim b as string =DataTables("表B").GetComboListString("编码")

dim a as string = DataTables("表A").GetComboListString("费别","","序号")

Output.Show(a)

Dim dtb As New DataTableBuilder("统计")

dtb.AddDef("编码", GetType(string), 12)

for i as integer = 0 to a.split("|").length -1

    dtb.AddDef(a.split("|")(i), GetType(double), 32)

next

dtb.AddDef("合计", GetType(double), 32)                 '新增

dtb.AddDef("报销金额", GetType(double), 32)             '新增

dtb.AddDef("自付金额", GetType(double), 32)             '新增

dtb.Build()

Maintable = Tables("统计")

for ii as integer = 0 to b.split("|").length-1

    Dim r As Row = Tables("统计").Rows.AddNew()

    Tables("统计")(ii,"编码") = b.split("|")(ii)

    For c As integer = 1 To Tables("统计").Cols.Count-4

        Dim dc As DataRow

        dc = DataTables("表A").Find("费别 = '" & Tables("统计").Cols(c).name & "'")

        Dim dr As DataRow

        dr = DataTables("表B").Find( "编码 = '" & ii+1 & "' and 费别序号 = '" & dc("序号") & "'")

        if dr isnot nothing

            Tables("统计")(ii,c)= dr("金额")

        else

            Tables("统计")(ii,c)= 0      '没有的列为0

        end if

        Tables("统计")(ii,"合计") = Tables("统计")(ii,"合计") + Tables("统计")(ii,Tables("统计").Cols(c).name)

        Tables("统计")(ii,"报销金额")= 100   '**假定: (dr("统筹金额") - 起付线(不确定数))*报销比例(不确定数) = 100

        Tables("统计")(ii,"自付金额")= Tables("统计")(ii,"合计")-Tables("统计")(ii,"报销金额")

    next

next

 下载信息  [文件大小:22.6 KB  下载次数:0]
图片点击可在新窗口打开查看点击浏览该文件:狐表不支持纵向表转横向表?sql纵转横 管理项目5.rar

[此贴子已经被作者于2010-1-9 23:38:16编辑过]

感谢M兄提供代码。研究研究。图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | 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缺少的费别没出来。


 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

 回到顶部
总数 21 上一页 1 2 3 下一页