zqh0922 2016-01-22 12:36 采纳率: 0%
浏览 3951
已采纳

sql 行列转换时,空值如何设置成0

在用Sql静态方法进行行列转换时,数据库存在的空值如何处理?我想空值变为0.
create table tb(姓名 varchar(10) , 学号 varchar(10), 课程 varchar(10) , 分数 int)
insert into tb values('张三' ,'123456', '语文' , 74)
insert into tb values('张三' ,'123456', '数学' , 83)
insert into tb values('张三' , '123459','物理' , 93)
insert into tb values('李四' , '123457','语文' , 74)
insert into tb values('李四' , '123457','数学' , 84)
insert into tb values('李四' , '123457','物理' , 94)
insert into tb values('李四' , '123458','语文' , 74)
insert into tb values('李四' , '123458','数学' , 84)
insert into tb values('李四' , '123458','地理' , 94)
go

select m.* , n.总分
from(select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,地理,物理,几何,生物,化学)) b) m,
(select 学号 , sum(分数) AS 总分 from tb group by 学号) n
where m.学号= n.学号
go
因为生成这个报表的时候,我想让使用者可以设置,即“语文,数学,地理,物理,几何,生物,化学”,可以在TextBox中设置,我已经实现了。但是在行列转换后,会出现很多空值,在后续的处理,如求取单科的平均成绩时,空值就不会参与计算,所以需要将空值变为0.因为课程可能会变的原因“语文,数学,地理,物理,几何,生物,化学”可能会改变,因此不能用ISNULL(字段值,0)来改,因为不知道字段值是多少。

  • 写回答

4条回答

  • 叶芝殇 2016-01-29 03:47
    关注

    不行加个临时字段,弄个触发器。专门用来生成报表使用,null字段直接保存为0

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)