使用動態SQL語句實現簡單的行列轉置(動態產生列)

2022-05-10 09:55:04 字數 2985 閱讀 2709

原始資料如下圖所示:(商品的銷售明細)

date=業務日期;item=商品名稱;saleqty=銷售數量;

-- 建立測試資料(表)

create table test (date varchar(10), item char(10),saleqty int)

insert test values('2010-01-01','aaa',8)

insert test values('2010-01-02','aaa',4)

insert test values('2010-01-03','aaa',5)

insert test values('2010-01-01','bbb',1)

insert test values('2010-01-02','ccc',2)

insert test values('2010-01-03','ddd',6)

需要實現的報表樣式:每一行既每一天,顯示所有商品(列)該天的銷售數量;

實現的方法和思路如下:

-- 實現結果的靜態sql語句寫法

-- 整理報表需要的格式

-- 按日期彙總行

-- 處理資料:將空值的字段填入數字0;

靜態sql語句編寫完成!

-- 需要動態實現的sql部分

isnull (sum(case item when 'aaa' then saleqty end),0) as aaa,

isnull (sum(case item when 'bbb' then saleqty end),0) as bbb,

isnull (sum(case item when 'ccc' then saleqty end),0) as ccc,

isnull (sum(case item when 'ddd' then saleqty end),0) as ddd

-- 動態語句的實現

select 'isnull (sum(case item when '''+item+''' then saleqty end),0) as ['+item+']' 

from (select distinct item from test) as a

-- 這一步很關鍵:利用結果集給變數賦值;

-- 完成!

-- 刪除測試資料(表)

drop table test

使用動態SQL語句實現簡單的行列轉置(動態產生列)

原始資料如下圖所示 商品的銷售明細 date 業務日期 item 商品名稱 saleqty 銷售數量 建立測試資料 表 create table test date varchar 10 item char 10 saleqty int insert test values 2010 01 01 a...

使用動態SQL語句實現簡單的行列轉置(動態產生列)

原始資料如下圖所示 商品的銷售明細 date 業務日期 item 商品名稱 saleqty 銷售數量 建立測試資料 表 create table test date varchar 10 item char 10 saleqty int insert test values 2010 01 01 a...

動態SQL語句的拼接實現

平常經常遇到一些語句需要使用動態語句,來實現作業任務的計畫執行。例如動態表名,在分表設計時使用了月份格式 a 201912 在實現此類格式表名的作業任務時,必須採用動態語句,以避免每月更換一次sql語句的尷尬。現將部分實際操作經驗總結如下 一 基本語句格式 定義變數,給變數賦值,使用變數拼接sql,...