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


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

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

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


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

以下是引用czy在2010-1-9 12:19:00的发言:
我感觉先用SQLCommandExecuteReader生成临时表,然后SQLCrossTableBuilder从临时表中生成交叉表好象可以解决。
C版您看看怎样搞?最好不用狐表的办法。。。

实际上我只是想用此方法生成一行数据,实现fa piao打印(Excel报表)而已。

由于表A的费别在实际工作中是可增减的,所以每个患者的费别记录只能用表B的方法存储,不可能建立一个表C那样的表来存储数据。 所以只能寻求一个临时方法了。
[此贴子已经被作者于2010-1-9 12:53:11编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/1/9 12:53:00 [只看该作者]

以下是引用菜鸟foxtable在2010-1-9 12:46:00的发言:
C版您看看怎样搞?最好不用狐表的办法。。。

sql 俺不会搞! 帮你顶~~~~~~~~

但用狐表又[最好不用狐表的办法。。。 ] 说不通啊!~   当然,哪种方法更简便就用之呗~ 何必难为自己?  
如有sql论坛,最好到那里去问一问。   


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


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

m兄,您看看有没有好的思路?图片点击可在新窗口打开查看狐表的方法也行。

就是把费用分类的数据变成横向显示,没有的列为0,再根据EXCELpiao据模版打印出来。

图片点击可在新窗口打开查看此主题相关图片如下:002.gif
图片点击可在新窗口打开查看
[此贴子已经被作者于2010-1-9 13:02:17编辑过]

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


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

Dim b As New SQLCrossTableBuilder("统计表1","表A")
b.ConnectionName  = "数据源名称"
b.AddTable("表A","序号","表B","费别序号")
b.AddCols("表A","费别")
b.AddCols("表B","编码")
b.AddCols("表B","金额")
b.HGroups.AddDef("编码")
b.VGroups.AddDef("费别")
b.Totals.AddDef("金额")
b.Filter = "你要的条件"
b.Build
[此贴子已经被作者于2010-1-9 13:01:24编辑过]

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


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

以下是引用菜鸟foxtable在2010-1-9 12:55:00的发言:
m兄,您看看有没有好的思路?图片点击可在新窗口打开查看狐表的方法也行。

就是把费用分类的数据变成横向显示,没有的列为0,再根据EXCELpiao据模版打印出来。

图片点击可在新窗口打开查看此主题相关图片如下:002.gif

[此贴子已经被作者于2010-1-9 13:02:17编辑过]


如果示例中的编码等于实际应用中的住院号,15楼应该可以解决你的问题了。
或者增加条件为住院号。


图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2010-1-9 13:11:15编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/1/9 16:18:00 [只看该作者]

中午睡了一觉, 困死了~     这段代码应该也可以的: 你表C的后两行、后三列的数据不对吧?

dim b as string =DataTables("表B").GetComboListString("编码")
dim a as string = DataTables("表A").GetComboListString("费别","","序号")
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.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)
next
for r as integer = 0 to Tables("统计").Count - 1
    For c As integer = 1 To Tables("统计").Cols.Count - 1
        Dim dc As DataRow
        dc = DataTables("表A").Find("费别 = '" & Tables("统计").Cols(c).name & "'")
        Dim dr As DataRow
        dr = DataTables("表B").Find( "编码 = '" & r+1 & "' and 费别序号 = '" & dc("序号") & "'")
        if dr isnot nothing
            currenttable(r,c)= dr("金额")
        else
            currenttable(r,c)= 0      '没有的列为0
        end if
    next
next
[此贴子已经被作者于2010-1-9 17:57:34编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/1/9 17:57:00 [只看该作者]

简化一下::: 就是把上面两个for 。。。 next 合并起来

 

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

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

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.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 - 1

        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

    next

next

[此贴子已经被作者于2010-1-9 18:07:15编辑过]

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


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

以下是引用czy在2010-1-9 13:01:00的发言:
Dim b As New SQLCrossTableBuilder("统计表1","表A")
b.ConnectionName  = "数据源名称"
b.AddTable("表A","序号","表B","费别序号")
b.AddCols("表A","费别")
b.AddCols("表B","编码")
b.AddCols("表B","金额")
b.HGroups.AddDef("编码")
b.VGroups.AddDef("费别")
b.Totals.AddDef("金额")
b.Filter = "你要的条件"
b.Build
[此贴子已经被作者于2010-1-9 13:01:24编辑过]

C版的方法不行哦,只能显示该病人的费别,没有的费别没显示。


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


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

以下是引用菜鸟foxtable在2010-1-9 19:02:00的发言:

C版的方法不行哦,只能显示该病人的费别,没有的费别没显示。


如果没有费别的也要显示,不要用Filter就可以了。


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


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

M兄方法可行,但是光是这样还是满足不了需要,合计好办,但是报销金额和自费金额还要经过明细项的繁琐计算才得出。

实际工作需要如下图,生成自费金额,统筹金额后。还要:(统筹总金额-起付线(不确定数)X报销比例(不确定数) = 报销金额
 

图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.png
图片点击可在新窗口打开查看


希望能在后台SQL视图中生成横向查询表。看来得问问LXL版主了,不知道他QQ多少?
[此贴子已经被作者于2010-1-9 19:17:45编辑过]

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