Chinaunix首页 | 论坛 | 博客
  • 博客访问: 433823
  • 博文数量: 158
  • 博客积分: 1855
  • 博客等级: 上尉
  • 技术积分: 1888
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-18 14:19
文章分类

全部博文(158)

文章存档

2013年(4)

2012年(16)

2011年(10)

2010年(40)

2009年(61)

2008年(33)

分类: Mysql/postgreSQL

2012-11-20 13:42:11

一、A、B两表关联,如果要生成下列显示结果,如何写sql语句?

A表

id      number_a

1       5

2       7

3       13

4       1

 

B表

id      number_b

1       10

4        8

 

显示结果

id      number_a   number_b   number_sum

1          5          10         15

2          7           0          7

3          13          0         13

4          1           8          9

ISNULL:

ISNULL ( check_expression , replacement_value )参数
check_expression

将被检查是否为 NULL 的表达式。check_expression 可以为任何类型。

replacement_value

check_expression 为 NULL 时要返回的表达式。replacement_value 必须是可以隐式转换为 check_expresssion 类型的类型。

返回类型

返回与 check_expression 相同的类型。

备注

如果 check_expression 不为 NULL,则返回它的值;否则,在将 replacement_value 隐式转换为 check_expression 的类型(如果这两个类型不同)后,则返回前者。

   

select a.id,number_a,ISNULL(number_b,0) number_b,number_a+ISNULL(number_b,0) number_sum from a left outer join b
on a.id=b.id

二、删除除了自动编号不同,其他都相同的学生冗余信息。表中有这些字段:自动编号,学号,姓名,课程编号,分数。

delete from score
where 自动编号 not in(select MIN(自动编号) from score 
                      group by 学号,姓名,课程编号,分数)

三、从表T1中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。注:T1中有很多科目,都有1--12月份的发生额。AccID(科目代码),Occmonth(发生额月份),DebitOccur(发生额)

select distinct AccID from T1
where AccID not in
(select T1.AccID from T1,(select * from T1 where AccID='101') as db101
where T1.Occmonth=db101.Occmonth and
T1.DebitOccur<=db101.DebitOccur
)

四、表t中有ABC三列,用一条SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

select (case when a>b then a else b end),
  (case when b>c then b else c end)
from t

 

阅读(826) | 评论(0) | 转发(0) |
0

上一篇:OpenVAS漏洞评估系统

下一篇:SQL试题

给主人留下些什么吧!~~