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


  共有22746人关注过本帖平板打印复制链接

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

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
狐表不支持纵向表转横向表?(分享LXL版主SQL纵转横代码)  发帖心情 Post By:2010/1/8 23:16:00 [只看该作者]

其中有基础表两个[F费用类别][结算单],结构基本同7楼图片所示表。

这个是动态纵转横:

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)



假设收费类别固定,则用静态纵转横:

select 住院序号,
Sum(case 收费类别 when '床位' then 结算金额 else 0 end) as [床位],
Sum(case 收费类别 when '护理' then 结算金额 else 0 end) as [护理],
Sum(case 收费类别 when '检查' then 结算金额 else 0 end) as [检查],
Sum(case 收费类别 when '检验' then 结算金额 else 0 end) as [检验],
Sum(case 收费类别 when '其他' then 结算金额 else 0 end) as [其他],
Sum(case 收费类别 when '手术' then 结算金额 else 0 end) as [手术],
Sum(case 收费类别 when '特需服务' then 结算金额 else 0 end) as [特需服务],
Sum(case 收费类别 when '西药' then 结算金额 else 0 end) as [西药],
Sum(case 收费类别 when '诊查' then 结算金额 else 0 end) as [诊查],
Sum(case 收费类别 when '治疗' then 结算金额 else 0 end) as [治疗],
Sum(case 收费类别 when '中草药' then 结算金额 else 0 end) as [中草药],
Sum(case 收费类别 when '中成药' then 结算金额 else 0 end) as [中成药] from
(select a.住院序号,a.结算金额,b.收费类别 from 结算单 a
join F费用类别 b on a.费用类别= b.编码) as d
group by 住院序号


=======================华丽的分割线==============================

问题:假设有张学生成绩表(tb)如下:

姓名 课程 分数

张三 语文 74

张三 数学 83

张三 物理 93

李四 语文 74

李四 数学 84

李四 物理 94

想变成(得到如下结果):

姓名 语文 数学 物理

---- ---- ---- ----

李四 74   84   94

张三 74   83   93

-------------------
下述查询语句报错!

select 姓名 as 姓名 ,

  max(case 课程 when '语文' then 分数 else 0 end) 语文,

  max(case 课程 when '数学' then 分数 else 0 end) 数学,

  max(case 课程 when '物理' then 分数 else 0 end) 物理

from tb

group by 姓名


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

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