資料庫的一些例子及其分析

2021-05-04 13:10:33 字數 2961 閱讀 8357

1、表

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

create table #tmp(rq varchar(10),shengfu nchar(1))

insert into #tmp values('2005-05-09','勝')

insert into #tmp values('2005-05-09','勝')

insert into #tmp values('2005-05-09','負')

insert into #tmp values('2005-05-09','負')

insert into #tmp values('2005-05-10','勝')

insert into #tmp values('2005-05-10','負')

insert into #tmp values('2005-05-10','負')

分析:其實可以先寫這樣的sql語句:

select rq, ( case when shengfu = '勝' then 1 else 0 end)勝,

( case when shengfu ='負' then 1 else 0 end)負

from temp

產生如下的結果:

rq                勝       負

2005-05-09       1        0

2005-05-09       1        0

2005-05-09       0        1

2005-05-09       0        1

2005-05-10       1        0

2005-05-10       0        1

2005-05-10       0        1

然後就group一下就行了!

比較好的寫法是:

select

rq, sum(case when shengfu='勝' then 1 else 0 end)'勝',sum(case when shengfu='負' then 1 else 0 end)'負' from #tmp group by rq

另一種思路:

select a.rq,a.勝,b.負 from

(select rq,  count(sf) 勝 from temp  where sf='勝' group by rq )a

inner join

(select rq, count (sf) 負 from temp where sf='負' group by rq) b

on a.rq=b.rq

2、請用乙個sql語句得出結果

從table1,table2中取出如table3所列格式資料,注意提供的資料及結果不準確,只是作為乙個格式向大家請教。

如使用儲存過程也可以。

table1

月份mon 部門dep 業績yj

-------------------------------

一月份       01       10

一月份       02       10

一月份       03       5

二月份       02       8

二月份       04       9

三月份       03       8

table2

部門dep       部門名稱dname

--------------------------------

01       國內業務一部

02       國內業務二部

03       國內業務三部

04       國際業務部

table3 (result)

部門dep 一月份       二月份       三月份

--------------------------------------

01       10         null       null

02       10         8         null

03       null       5         8

04       null       null       9

------------------------------------------

思路:這個題實際上只需用到table1 而且table3的答案有點問題

select  dep,sum(case when mon='一月份' then yj else 0 end)一月份,

sum(case when mon='二月份' then yj else 0 end)二月份,

sum(case when mon='三月份' then yj else 0 end)三月份

from table1  group by dep order by dep)a ;

結果是:

部門dep 一月份       二月份       三月份

--------------------------------------

01       10         0        0

02       10         8        0

03       5           8        0 

04       0           9        0

------------------------------------------

然後就把0轉為null就行了,其實一開始還是用0來算 這樣group就方便了

資料庫一些記錄

資料庫三大正規化 第一正規化 1nf 資料表中的每一列 每個字段 必須是不可拆分的最小單元,也就是確保每一列的原子性。解釋 每一列屬性都是不可再分的屬性值,確保每一列的原子性,如果兩列的屬性相近或相似或一樣,盡量合併屬性一樣的列,確保不產生冗餘資料。第二正規化 2nf 滿足1nf後,要求表中的所有列...

資料庫的一些複習

1.關係資料模型的資料結構,在使用者的觀點下,關係模型中資料的結構就是一張二維表,它由行和列組成 關係必須是規範化的,滿足一定的規範條件 1 最基本的規範條件 關係的每乙個分量必須是乙個不可分割的資料項,不允許表中還有表 2.關係模型的操作和完整性約束 資料操作是集合操作,操作物件和操作結構都是關係...

一些資料庫的操作

建立乙個資料庫 create database database name 刪除乙個資料庫 drop database database name 顯示資料庫 show databases 進入某個資料庫 use database name 建立乙個資料表 create table database...