您的位置:首页 > 数据库

sql service (case when then else end ..... group by)

2017-03-31 15:12 369 查看

1.

原表: 
courseid coursename score 
------------------------------------- 
1 java 70 
2 oracle 90 
3 xml 40 
4 jsp 30 
5 servlet 80 
------------------------------------- 
为了便于阅读, 查询此表后的结果显式如下( 及格分数为60): 
courseid coursename score mark 
--------------------------------------------------- 
1 java 70 pass 
2 oracle 90 pass 
3 xml 40 fail 
4 jsp 30 fail 
5 servlet 80 pass 
--------------------------------------------------- 
写出此查询语句

1 USE T4st
2
3 GO
4 IF(EXISTS(SELECT * FROM sysobjects WHERE name ='courseTes'))
5 DROP TABLE courseTes
6 GO
7
8 CREATE TABLE courseTes
9 (
10    courseid INT NOT NULL PRIMARY KEY IDENTITY,
11    coursename NVARCHAR(50) NOT NULL,
12    score INT NOT NULL
13 )
14
15 INSERT dbo.courseTes
16         ( coursename, score )
17 VALUES  ( N'java', -- coursename - nvarchar(50)
18           N'70'  -- score - int
19           )
20 INSERT dbo.courseTes
21         ( coursename, score )
22 VALUES  ( N'oracle', -- coursename - nvarchar(50)
23           N'90'  -- score - int
24           )
25 INSERT dbo.courseTes
26         ( coursename, score )
27 VALUES  ( N'xml', -- coursename - nvarchar(50)
28           N'40'  -- score - int
29           )
30 INSERT dbo.courseTes
31         ( coursename, score )
32 VALUES  ( N'jsp', -- coursename - nvarchar(50)
33           N'30'  -- score - int
34           )
35 INSERT dbo.courseTes
36         ( coursename, score )
37 VALUES  ( N'servlet', -- coursename - nvarchar(50)
38           N'80'  -- score - int
39           )
40 SELECT * FROM courseTes
41
42 SELECT t.courseid,t.coursename,t.score,
43 (
44    CASE
45    WHEN t.score > 60 THEN 'pass'
46    ELSE 'fail'
47    END
48 )
49 AS mark
50 FROM courseTes AS t

运行结果如下:

2.

表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负

如果要生成下列结果, 该如何写sql语句?

   时间          胜    负
2005-05-09  2     2
2005-05-10  1     2

SQL语句

1 USE T4st
2
3 GO
4 IF(EXISTS(SELECT * FROM sysobjects WHERE name ='Score'))
5 DROP TABLE Score
6 GO
7
8 CREATE TABLE Score
9 (
10    TimeId NVARCHAR(50) NOT NULL,
11    SuccessOrFail NVARCHAR(50) NOT NULL,
12 )
13
14 INSERT Score
15        (TimeId,SuccessOrFail)
16 VALUES (
17         N'2005-05-09',
18         N'胜'
19         )
20 INSERT Score
21        (TimeId,SuccessOrFail)
22 VALUES (
23         N'2005-05-09',
24         N'胜'
25         )
26 INSERT Score
27        (TimeId,SuccessOrFail)
28 VALUES (
29         N'2005-05-09',
30         N'负'
31         )
32 INSERT Score
33        (TimeId,SuccessOrFail)
34 VALUES (
35         N'2005-05-09',
36         N'负'
37         )
38 INSERT Score
39        (TimeId,SuccessOrFail)
40 VALUES (
41         N'2005-05-10',
42         N'胜'
43         )
44 INSERT Score
45        (TimeId,SuccessOrFail)
46 VALUES (
47         N'2005-05-10',
48         N'负'
49         )
50 INSERT Score
51        (TimeId,SuccessOrFail)
52 VALUES (
53         N'2005-05-10',
54         N'负'
55         )
56
57 SELECT * FROM Score
58
59 SELECT s.TimeId AS '时间',
60 SUM(
61   CASE
62   WHEN s.SuccessOrFail ='胜' THEN 1
63   ELSE 0
64   END
65 ) AS '胜',
66 SUM(
67   CASE
68   WHEN s.SuccessOrFail ='负' THEN 1
69   ELSE 0
70   END
71 ) AS '负'
72 FROM Score AS s GROUP BY s.TimeId

运行结果如下:

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: