讓查詢資料由行變成列

2021-04-18 01:19:50 字數 2181 閱讀 9524

有這樣兩個資料表

(wuzi_table)

物資編碼

(id), 

顏色編號

(color_id), 

數量(acount)

1111          1                   10

2222          2                   20

1111          1                   20

3333          3                   5

1111          3                   10

(yanse_table)

顏色編號

(color_id), 

顏色名稱

(color)

1                   

紅色2                   

蘭色3                   

綠色...

顏色可能會增加

如何查詢得到

物資編碼

紅色蘭色

綠色...

1111       30      0       10

2222       0       20      0

3333       0       0       5

--建表

create table wuzi_table(

id int,color_id varchar(2) ,acount int)

create table yanse_table(

color_id varchar(2), color varchar(4))

insert into [wuzi_table]([id],[color_id],[acount])

values(1111,1,10)

insert into [wuzi_table]([id],[color_id],[acount])

values(2222,2,20)

insert into [wuzi_table]([id],[color_id],[acount])

values(1111,1,20)

insert into [wuzi_table]([id],[color_id],[acount])

values(3333,3,15)

insert into [wuzi_table]([id],[color_id],[acount])

values(1111,3,10)

insert into [yanse_table]([color_id],[color])

values(1,'紅色')

insert into [yanse_table]([color_id],[color])

values(2,'蘭色')

insert into [yanse_table]([color_id],[color])

values(3,'藍色')

--如果資料不多的話可以用下面的語句

select id,sum(case when color='紅色' then acount else 0 end) as 紅色,  

sum(case when color='蘭色' then acount else 0 end) as 蘭色,  

sum(case when color='綠色' then acount else 0 end) as 綠色      

from  wuzi_table w ,yanse_table y where w.color_id=y.color_id  

group by id

go***********************************==

--如果資料是動態生成的可用下面語句

declare @s varchar(8000)

set @s=''

select @s=@s+',['+color+']=sum(case color_id when '+color_id +' then acount else 0 end) '+char(10) from yanse_table

exec ('select distinct id '+@s+' from wuzi_table group by id')

--print @s

================

SQL語句查詢結果由行變為列

q 用sql語句,把表中的資料由行變為列.查詢前 id 姓名 科目 分數 1 張三 語文 65 2 張三 數學 85 3 張三 外語 75 4 李四 語文 90 5 李四 數學 60 6 李四 外語 50 查詢後 姓名 語文 數學 外語 李四 90 60 50 張三 65 85 75 a 1.先建表...

oraclel列變行(多列變成多行)

和mysql的一起對照著看 這篇是oracle10g的環境 資料庫結構如圖 這裡將相同名字的不同分數 不同列 顯示在多個行中,形如 sql如下 select name 數學 as type math as score from student union select name 語文 as type...

把行資料變成列資料的SQL查詢

group by 子句 指定用來放置輸出行的組,並且如果 select 子句 中包含聚合函式,則計算每組的彙總值。指定 group by 時,選擇列表中任一非聚合表示式內的所有列都應包含在 group by 列表中,或者 group by 表示式必須與選擇列表表示式完全匹配。即select選擇的列要...