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

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

编辑:说三道四文库 发布时间:2017-11-19 05:45
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 ....
====    ========  ========  ========  ========  ========
还需要作的事情,把英文的字段名,转换成中文
谷歌产品设计:Larry Page的魅力革命 开源移动统计工具Countly更新 支持Unity 3D DailyCost传奇设计师访谈,彰显HTML5移动应用优势 如何成为一名架构师? Apache Hadoop集群的安全性架构 Wood Camera开发者访谈:我们如何冲到榜首的 代码审查:程序员内炼之道 Twitter Q1推广告API 收入剑指10亿 Dell:在OpenStack成熟后才会推出服务 一个开源工作者对开源与赚钱的一些想法 宏碁:Windows8仍不成功 Chrome表现令人意外 雅虎发布Q4财报 净利润同比下滑8% 游戏机禁售令起风波,索尼任天堂股价大涨 国外开发者吐槽Facebook Android设计一例 Rovio转向发行业务 将发布新作Tiny Thief 上山下海 “硬汉”服务器无所不能 访金山云CTO杨刚:开源改进PK自主研发,技术驱动前行 苹果涉及色情问题,且进一步恶化 开源产品系列:面向组件的Web框架tapestry 360指责百度窃取用户信息 公布美杜莎插件技术分析 苹果正式发布iOS 6.1 最快本周日即可越狱 苹果高管:运行iOS 6的设备达3亿 Chrome OS 黑客大赛总奖金为314.159万美元 微软雷德蒙研究院副总裁:从计算研究到惊人发明 还驾驭不了4核? 别人已模拟出百万核心上的并行 RIM将网络直播BlackBerry 10发布会 解读TDD的五大误区 Amazon 2012财年Q4财报:电子书业务增长70% 从暴风影音CTO到创业者:画中画相机话中话 为什么Android应用开发总要比iOS晚? 传奇VC马克.安德雷森:未来的企业什么样? 请问C++有哪几个方向可以发展? 高分急求高手:Sybase查询的汉字问题 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 帮我译vb为c# VB.net如何在进程之间通讯,我用SendMessage发WM_COPYDATA给目标窗口,可是总是不行,请高手帮忙! 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 关于文件操作的那几个函数问题 如何初始化const char * p[5]数据成员? 如何安装WINME???急!,在线等!!! C文件读写(急,来者有分) ---控件--里连接---数据库---都有什么方法?SQL2K 正在搜索 请稍后 是怎么做的? 为什么这样做? 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 再问,关于中文字符.急!!!! OleDbDataReader这个东西是不是不可以同时打开两个? 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 日期的计算问题 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 用jsp编打印图片的问题(很急) 谁第一个来,谁得分 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 今天生日,除了MM没人祝我生日快乐,只好自已祝福自已了(散分) 如何将表单提交到数据库中? 在线等!!!!!!!!!!!! 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 如何在屏幕任意位置显示移动的文字 收到了数字情书,我嫩是解不开。。帮帮我吧,不好回了。 如何让winamp慢速播放mp3? 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 在服务器端的DLL文件中如果获取网站在服务器的磁盘上的路径? 在水晶报表中如何控制所显示记录的条数! 一个超级奇怪的iis问题??????? 一路同行?我开始学习C#, 我是一从为接触过单板的人,学的是软件。现在我想提一个问题。 如何解决UNIX通讯问题? 关于读出文件里的字符串与录入的字符串比较问题 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! help!有关SESSIONBEAN! 无法联接ORACLE数据库,错误信息:ORA-01034:ORACLE not available 其它信息 sos 用vb怎么实现打印功能啊,不是vb附带的那小功能啊,把家帮帮忙啊,。。。sos 请教高手:视频传输编程技术!!! 请教!.net的程序一定要 各位大侠:小女请教一问题 求救!美编的工作站显示器只能显示黑白了! Excel控件使用之怪现象,请DX们诊断诊断 ACCESS转为SQLSERVER后的问题~~ 这是什么错误? asp中怎么读取xml中的元素值呀? 请问,DATAGIRD能否在编辑时,在表格里使用下拉框控件,如何使用??谢谢 敌人在叶挺将军面前显得十分【 】 例:急得(团团转) 谈得() 笑得() 跑得()热得() 做得() 唐雎不辱使命 一字多义词 总结,全部. 狼不会流泪吗?听说狼不会流泪,因为狼没有泪腺,这是真的吗? 蔺相如和诸葛亮哪个大 “夜哭狼” 是什么意思? 谁有《新编高中物理奥林匹克竞赛指导》和 《新编高中物理奥林匹克竞赛实用题典》(范晓辉)的电子书?如题,wansichen123 @126.com 收到后追加财富 新编高中物理奥赛指导中的恒定电流的第二十一题怎么做啊 抗战胜利后国民党玩弄假和平的阴谋及标志性事件是什么 新编高中物理奥赛指导的答案是不是标准的额,和乐恩特老师教导的会不会有所出入 求解答(全部).在下谢谢各位英雄好汉了. 世界最贵“粉红之星”钻石亮相纽约 估土耳其买或不买,中国导弹都赢了美摄影师冰冷海水中拍摄企鹅跳水【高清印度首都发生工厂火灾6人死亡 10多尼日利亚一教堂发生踩踏事故 致17人奇数为男偶数是女?2013年是“男性周观天下:美国的“偷窥瘾”世贸组织部长会议下月初在印尼巴厘岛举世贸组织部长会议下月初在印尼巴厘岛举俄摄影师“高空厨房”揭秘飞机餐(组图德美将达成互不监听协议 明年年初实施菜价狂涨,“蒜你狠”何时匿迹“青椒”如何找到存在感“自强之星”赵月:选择不了出身但可以与美做伴 阳光成长副省长出庭应诉体现了权力的谦卑浙江诸暨:带田入股 保底分红新疆群众举报涉暴恐犯罪线索最高奖励5我们在微信群里为什么不能好好说话青年信用体系建设领导小组会议召开图片新闻全国首起检察机关提起环境公益诉讼案件
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘