原始table資料
把month列轉為行頭&新增總計、小計
1結果--分類彙總
2select
3isnull
(prdlb,'總計
') asprdlb,
4isnull([
month],
'小計')
as[month],
5case
when
prdlb
isnull
then
/*如果是總計列,(本月合-上月合)/上月*/6
convert
(varchar
,convert
(numeric(8,
2),round
((sum
(r1)
-sum
(r2))
*100
/sum
(r2),
2)))+'
%'7else
8convert
(varchar
,sum
(divide))+'
%'9end
asdivide
10into
#tempresult_total
11from
#tempresult
12group
byprdlb,
[month]13
with
cube
14--
15--
行列轉換
16declare
@str
nvarchar
(max)17
declare
@str2
nvarchar
(max)18
declare
@sql
nvarchar
(max)19
set@str=''
20set
@str2=''
21set
@sql='
select prdlb,'22
select
@str
=@str+'
,isnull(['+
month+'
],0) as ['+
month+'
]'from
(select
distinct
(month
) from
#tempresult_total)
ast1
/*生成select後的列名
*/23
select
@str2
=@str2+'
,['+month+'
]'from
(select
distinct
(month
) from
#tempresult_total )
ast2
24set
@str
=right
(@str
,len
(@str)-
1)25set
@str2
=right
(@str2
,len
(@str2)-
1)26set
@sql
=@sql
+@str+'
from #tempresult_total pivot (max(divide) for month in ('+
@str2+'
)) as t '27
exec
(@sql
)
以上轉換的前提是原始table資料列只有一行divide
但遇到如下table時【month對應多個資料列】,需轉換兩次
第一步:增加result列,把原列名以item列的資料形式存在
select結果month
,item,result
--into #tempresult2
from
#tempresult
unpivot
/*列轉行*/(
result
foritem in(
sum,cut,cost)
) as
unpvt
然後就類似前面提到的操作
--轉換兩次後的結果再將月份從行轉成列
declare
@str
nvarchar
(max
) declare
@str2
nvarchar
(max
) declare
@sql
nvarchar
(max
) set
@str=''
set@str2=''
set@sql='
select item,
'select
@str
=@str+'
,isnull(['+
month+'
],0) as ['+
month+'
]'from
(select
month
from
#tempresult)
ast1
/*生成select後的列名
*/select
@str2
=@str2+'
,['+month+'
]'from
(select
month
from
#tempresult )
ast2
set@str
=right
(@str
,len
(@str)-
1) set@str2
=right
(@str2
,len
(@str2)-
1)set@sql
=@sql
+@str+'
from #tempresult2 pivot (sum(result) for month in ('+
@str2+'
)) as t
'exec
(@sql
)
SQL小技巧 行列互轉,換行,根據條件顯示不同內容
sql小技巧 1 行列互轉 1 建立乙個表 create table tb1 姓名 varchar 10 語文 int 數學 int 物理 int 插入兩條資料 insert into tb1 姓名 語文 數學 物理 values 張三 74,83,93 insert into tb1 姓名 語文 ...
簡單的敘述下SQL中行列轉換的小知識!
行列轉換對於工作還是學習中總是不可避免的會遇到 雖然本人還尚未工作,萌萌噠的學生一枚 解決的方法也有很多,我這裡就總結一下我所想解決的問題以及怎麼去解決的方法,可能網上已經有很多類似的方法了,有的比我的可能會更好,就當我記錄一下自己的學習經歷吧。這裡我們列舉乙個關於 的每日入賬出賬做乙個統計然後整理...
revit二次開發之單位轉換
revit內部基本單位是英呎,如果要獲取或設定構件引數數值需要進行單位轉換,比如轉換為基本的公釐或公尺等單位 1.可以使用常規方式進行轉換 1英呎等於0.3047999995367公尺,等於304.7999995367公釐 2.可以使用revitapi內建的轉換函式進行目標單位的轉換 使用unitu...