SQL 操作列轉行查詢

2021-07-15 21:22:33 字數 1980 閱讀 4822

題目: 如下一張學生成績表(tb_score)

```

t_name t_course t_score

小明 語文 90

小明 數學 87

小明 英語 85

小紅 語文 92

小紅 數學 89

小紅 英語 95

```

要求,寫出合理的sql語句,得到下面的結果

```

姓名 語文 數學 英語

小明 90 87 85

小紅 92 89 95

```

解答: 測試環境 postgres (摯愛)

1) 建表

set search_path to

public;

-- scripts

create

table

public.tb_score

(id serial,

t_name character

varying(24) not

null,

t_course character

varying(64) not

null,

t_score smallint

notnull

default

0, constraint tb_score_id primary

key (id),

constraint tb_score_unq_name unique (t_name, t_course)

)with (

oids=false

);

2) 插入資料

insert

into

public.tb_score (t_name, t_course, t_score)

values ('小明','語文',90), ('小明','數學',87),

('小明','英語',85), ('小紅','語文',92),

('小紅','數學',89), ('小紅','英語',95);

3) 查詢

select t_name as

"姓名",

sum(case t_course when

'數學'

then t_score else

0end) as

"數學",

sum(case t_course when

'英語'

then t_score else

0end) as 英語,

sum(case t_course when

'語文'

then t_score else

0end) as 語文

from

public.tb_score

group

by t_name;

select t_name as

"姓名",

sum(case t_course when

'數學'

then t_score else

null

end) 數學,

sum(case t_course when

'英語'

then t_score else

null

end) 英語,

sum(case t_course when

'語文'

then t_score else

null

end) 語文

from

public.tb_score

group

by t_name;

python 列轉行 SQL 行轉列,列轉行

sql 行轉列,列轉行 行列轉換在做報表分析時還是經常會遇到的,今天就說一下如何實現行列轉換吧。行列轉換就是如下圖所示兩種展示形式的互相轉換 行轉列假如我們有下表 select from student pivot sum score for subject in 語文,數學,英語 通過上面 sql...

SQL查詢行轉列和列轉行

主要思路是分組後使用case進行條件判斷處理 示例1select team,示例2create table wyc test id int 32 not null auto increment name varchar 80 default null date date default null s...

sql中 列轉行

列轉行,主要是通過union all max來實現。假如有下面這麼乙個表 createtableprogrectdetail progrectname nvarchar 20 工程名稱 overseasupplyint,海外 商供給數量 nativesupply int,國內 商供給數量 south...