動態交叉表總結

2021-08-22 03:56:42 字數 1178 閱讀 6967

declare @sql varchar(8000)

看論壇裡討論動態交叉表這麼多貼,小結了一下.

其實建立動態交叉表裡是應用了遞迴的select變數這種概念,遞迴的select變數可以使用select語句和子查詢將乙個變數與其自身拼接起來。

乙個標準的建立動態交叉表的code我歸納如下:

declare @sql varchar(8000)

set @sql = 'select columna,'

select @sql = @sql + 'sum(case columnb when '''+columnb+ ''' then columnc else 0 end) as '''+columnb+ ''','

from (select distinct columnb from table) as a

select @sql = left(@sql,len(@sql)-1) + ' from table group by columna'

exec(@sql)

go相信這個可以實現絕大部分動態交叉表

example:

declare @s nvarchar(4000)

set @s=''

select @s=@s+n',sum(case 所屬糖廠 when n'''+所屬糖廠+n''' then 實際重量 else 0 end) as '+所屬糖廠

from v_ponderationinfo_gather group by 所屬糖廠 order by 所屬糖廠

select @s=n'select ''總噸位'' as 所屬糖廠 '+@s+' from v_ponderationinfo_gather group by 所屬糖廠'

exec(@s)

declare @s nvarchar(4000)

set @s=''

select @s=@s+n',sum(case 所屬糖廠 when n'''+所屬糖廠+n''' then 實際重量 else 0 end) as '+所屬糖廠

from v_ponderationinfo_gather group by 所屬糖廠 order by 所屬糖廠

select @s=n'select n''總噸位'' as 所屬糖廠 '+@s+n' from v_ponderationinfo_gather'

exec(@s)

go

SQL動態交叉表

動態交叉表就是列表可以根據表中資料的情況動態建立列。動態查詢不能使用 select 語句實現,它可以利用儲存過程實現。思路是 首先檢索列頭資訊,形成乙個游標,然後遍歷游標,將上面靜態交叉表實現過程中使用 case 語句判斷的內容用游標裡的值替代,形成一條新的 sql查詢語句,然後執行並返回結果。下面...

oracle動態交叉表

有一張表 id name quarter quantity 1 開發部 春天 10000 2 開發部 夏天 50000 3 開發部 秋天 30000 4 開發部 冬天 20000 5 銷售部 春天 10000 6 銷售部 夏天 4000 7 銷售部 秋天 30000 8 銷售部 冬天 20000 想...

動態交叉表的實現

declare sql varchar 8000 set sql select makedate,select sql sql sum case status when status then status else 0 end as status from select distinct stat...