SQLServer多行多列資料轉為一行
阿新 • • 發佈:2019-02-18
--一行多列轉一行 --構建臨時表 create table #temp(id int,dataType int,val int,price decimal(10,2)); --插入資料 insert into #temp(id,dataType,val,price) select 1,1,100,20.5 union all select 1,2,200,30.6 union all select 1,3,300,40.7 --查詢資料 select id,dataType,val,price from #temp; --將一列多行轉換成一行 select id,value,valueType+CONVERT(varchar(1),dataType) valueType from (select id,dataType,convert(decimal(10,2),val) val,convert(decimal(10,2),price) cd --注意:要轉換的列要保持型別一致,不然會報錯 from #temp ) x unpivot (value for valueType in (val,cd)) y --將多行轉換成多列 select id,val1,cd1,val2,cd2,val3,cd3 from (select id,value,valueType+CONVERT(varchar(1),dataType) valueType --注意:不同型別列拼接,注意轉換 from (select id,dataType,convert(decimal(10,2),val) val,convert(decimal(10,2),price) cd --注意:要轉換的列要保持型別一致,不然會報錯 from #temp ) x unpivot (value for valueType in (val,cd)) y --注意:如果in()中為數字,用中括號([])括起來。例如:in ([001],[002],[003]) --SO問題來了:怎樣呼叫欄位? --呼叫欄位時,同樣採用[001],[002],[003]欄位,SQLServer中會把中括號([])解析掉 --如果比較列標題是否一致時,比如:[001]標題解析為:001,它是否於正常的001一樣呢? --答案:不一樣。建議給這些特殊欄位標題起個別名 ) m pivot (max(value) for valueType in (val1,cd1,val2,cd2,val3,cd3)) n;