用SQL進行多值列拆分成二值列的乙個實現

2021-08-08 18:14:05 字數 800 閱讀 5851

在進行資料分析的時候,往往需要把資料**中的多值列拆分成二值列。如圖1中的表a所示,fruits為乙個多值列,值可以是不同的水果名字,表明某個以id作為標識的人吃水果的記錄。現在的需求是要把是否吃了什麼具體水果拆成多個列,最終如表b所示。在這個例子中,吃水果的記錄還有重複,所以需要把重複的記錄去掉。

具體來說,可以將這個任務拆分成多個步驟,由不同的sql select語句完成。如圖2所示。這兒使用的資料庫是db2。

圖1

圖2從表a到a1的過程重點是需要將每一行中的水果名字轉化成相應新列的0/1值。

from a;

可以看到,id為3的記錄重複出現了。因此需要用group by去掉重複的。這次的查詢是基於上一次的結果,因此我們用with將上一次的查詢包含進來。

with q1 as (

from a

)select *

from q1

a2中,id為2的記錄出現了2次,可以把相應的列的值整合起來。同樣用with將第二次的查詢包含進來。

with q1 as (

from a

), q2 as (

select *

from q1

) from q2

group by id;

乙個關於返回值為指標的函式的實列

include float search float pointer 4 int n pointer是乙個 型別的指標,指向乙個含有四個元素的陣列,指向某一排 intmain void float p int i,k scanf d k printf d k printf the score of ...

對乙個表的多個列進行統計

統計多列資料到一張橫表中 select t.b.name as mc substring t.dm,1,2 as sz from select xqdh as dm sum case when km1 語文 and klmc 高起文 then 1else 0end as wkyw sum case ...

用乙個表中的一列值更新另外一表中的一列值

今天寫乙個小儲存過程,呵呵!功能大家試一下就知道了。create proc proc test uid int 0 output,uname nvarchar 50 null output asbegin declare dd cursor scroll for select uid,uname f...