说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

以前我在CSDN看过类似的贴字,现在忘了这样的sql语句怎么写,请知情者赐教!!

编辑:说三道四文库 发布时间:2018-01-22 02:35
HTML文档下载 WORD文档下载 PDF文档下载
表1
  科室编码            费用名称            金额
     1                手术费              120
     1                检查费              80
     2                药费                230
     2                B超费               180
    ...               ....                ...
     .                  .                  .
     .                  .                  .
    ...               ....                ...
表2
  科室编码            科室名称
     1                外科
     2                内科
    ...              .....
     .                 .
     .                 .
     N                 放射科

要求输出表3
   科室名称           手术费      检查费     药费      B超    .......
    外科              120          80        0        0      ......
    内科               0           0         230     180     ......
    ....              ...         ...        ...     ...     ......


请CSDN上的兄弟姐妹支持
你用的SQL Server吗,可以用case语句写出来
我用的是sql server,请randy_mic(生于70年代)赐教
select a.科室名称,(select isNULL(金额,0) from b where a.科室编号=b.科室编号 and b.药费名称='手术费'),(select isNULL(金额,0) from b where a.科室编号=b.科室编号 and b.药费名称='检查费'),(select isNULL(金额,0) from b where a.科室编号=b.科室编号 and b.药费名称='药费'),(select isNULL(金额,0) from b where a.科室编号=b.科室编号 and b.药费名称='B超')) from 表1 a,表2 b
这是SQL Server可以实现的语句。
http://expert.csdn.net/Expert/topic/1366/1366777.xml?temp=.1545069 

看看
如果你的表1中的药费名称不是固定,也就是说可能动态增长并没有确定数目,那么实现起来很难。我帮你问问。
select b.科室名称,
sum(case a.费用名称 when a.手术费 then a.金额 else 0),
sum(case a.费用名称 when a.检查费 then a.金额 else 0),
sum(case a.费用名称 when a.药费 then a.金额 else 0),
................
from 表1 a,表2 b
where a.科室编码=b.科室编码
group by a.科室编码
哦,还不一样 ... 如果费用名称固定好写点,如果不固定楼主可不可以改改表结构 ? 用专门一个表来保存费用名称
to shaperock(单刀侠):谢谢您的关注,sorry,我还有一点没讲清楚,那就是表1中的费用名称不是固定的,因为表1是临时表,好比说B超费有时有,有时又没有,其它费用名称也类似。科室对应的费用名称也不固定。还请shaperock(单刀侠)继续关注,不胜感激!!!
to wjlsmail(计算机质子):先谢谢您的关注,改表结构的可能性不大,因为表1是我在存储过程中创建的临时表,它是由SQL语句插入的数据,请继续关注好吗?!
to bluemeteor(挂月):谢谢您的关注,sorry,我还有一点没讲清楚,那就是表1中的费用名称不是固定的,因为表1是临时表,好比说B超费有时有,有时又没有,其它费用名称也类似。科室对应的费用名称也不固定。用Case语句应该写不出来,还请bluemeteor(挂月)继续关注,不胜感激!!!
学习!!!!!!!!!!!!
你的问题应该这样写:

select b.科室名称, 
(case 费用名称 when 手术费 then 金额 else 0 end) 手术费, 
(case 费用名称 when 检查费 then 金额 else 0 end) 检查费,
(case 费用名称 when 药费 then 金额 else 0 end) 药费,
(case 费用名称 when B超 then 金额 else 0 end) B超,
from 表1 a, 表2 b where a.科室编码=b.科室编码 
group by b.科室名称,手术费,检查费,药费,B超
你的问题应该这样写:

select b.科室名称, 
(case a.费用名称 when 手术费 then a.金额 else 0 end) 手术费, 
(case a.费用名称 when 检查费 then a.金额 else 0 end) 检查费,
(case a.费用名称 when 药费 then a.金额 else 0 end) 药费,
(case a.费用名称 when B超 then a.金额 else 0 end) B超,
from 表1 a, 表2 b where a.科室编码=b.科室编码 
group by b.科室名称,手术费,检查费,药费,B超
请大家再顶一下,晚点结贴,我看
http://expert.csdn.net/Expert/topic/1366/1366777.xml?temp=.1545069 上XRS(心如水)这样的问题已结贴,不知他是怎样实现的?我按上面各位大侠的高见去做了,还是实现不了,有谁知道XRS(心如水)怎么做的吗?恳请联系XRS(心如水).
http://expert.csdn.net/Expert/topic/1529/1529397.xml?temp=.6069757,看看大力的,它得也许对。
结贴,敬请ShapeRock(单刀侠)、pengdail(大力)接份,万分感激您们及关注者
以下是个人意见,希望大家指正!

楼主的问题,很常见,
我使用过2种方法处理过:
1、前台(或者说客户端)处理 (第1种方法,我做过控件处理显示 预览 打印)
2、后台(数据库存储过程)处理(使用临时表辅助处理)
第2种方法(sql语句怎么写):
表1:(科室编码 ,费用名称 ,金额)
表2:(科室编码 ,科室名称)

1:create table #Temp (No int , Name varchar(30))

2:insert into #Temp  (No,Name)
   select distinct 科室编码 ,科室名称
   from 表2

3:declare @Money char(20)
   declare @iCount char(20)
   declare @FieldName char(21)
   set @iCount = 1

   declare MyMoney cursor for 
   select distinct 费用名称 
   from 表1

   open MyMoney
   fetch MyMoney into @Money
   while @@fetch_status = 0 
   begin
      set @FieldName = 'Field'+Rtrim(Convert(char(3),@iCount))
      Exec(N'alter table #Temp ADD ['+@FieldName+'] float ')      
      
      Exec(N'update #Temp set ['+@FieldName+']='+
            'isnull(表1.金额,0) from 表1 where #Temp.No =表1.科室编码 and '+
            '表1.费用名称 = '+'"'@Money+'"')      
      

      fetch MyMoney into @Money
      set @iCount = @iCount +1
   end
   close MyMoney
   deallocate MyMoney

4:select * from #Temp
   order by No

最终显示结果:
No      Name      Field1    Field2    Field3    Field4 ....
====    ========  ========  ========  ========  ========
还需要作的事情,把英文的字段名,转换成中文
究竟是什么让Redshift比Hive快10倍?! [评论]将Linux拒之门外 微软被开源社区指控垄断 精细化运营:友盟统计分析SDK 3.0版本发布 “锤子OS”功能猜测与罗式对比营销 神奇!1KB JavaScript代码编写的3D蜜蜂 最优法统计单词频率的方法 各位能给点信息么? 紧急呀!Activex Data objects 2.0 libary升级问题 一个有关局域网与广域网之间数据库复制的问题? 怎样把char 型 变量 转变 为 int 型 如“8000”-》8000 我牛仔裤的拉链老是往下掉,经常被同事MM看到。各位有什么办法吗?? 想问下:用ADO返回一个记录集,和用ADO执行一个存储过程可以返回一个数据集的代码,谢谢 请教Oracle的安装 简单问题大家帮看看,ASP里找开加密的数据库怎么不一样啊? 求PA66+30%GF材料的物性表要英文版的, 一条直线斜率为2,另一条直线的倾斜角是这条直线的倾 急!请问PA66 910的电气性能PA66 910 若两直线斜率互为倒数,他们是什么位置关系? PA66+40%GF的物性 焰色反应为黄色的金属. 春天鸟儿欢唱,夏天野花盛开,秋天树木葱茏,冬天雪花 用四个成语替换括号里的词语:春天(鸟儿欢叫)夏天( 说说下列环境描写的作用:1.春天鸟儿欢叫,夏天野花 90后女孩爱上有妇之夫 逼男子离婚被男子吃药后感觉自己不男不女 见情侣亲女子相亲时是弟弟洞房成哥哥 5年后提河北自锯病腿患者昨日在医院手术 约十杭州地铁3号线 为啥短了十公里(图)每日操盘必读提前取保险金未果 男子以跳楼相逼苏宁重点突破母婴产品将独立化运作本届委员提案总数创历史新高云南水路20年内将通“两洋”连“三亚里番提督从良路在剑三世界做大侠争一仙我才不会看到弹幕呢重生之跳水王座石雨伞旅游良凤江国家森林公园旅游浙西天池旅游紫荆关旅游金沙滩墓群旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘