SQL將一列轉換成一行,並將這一行形成新的列

2022-08-24 09:33:13 字數 3056 閱讀 1862

sql部分-----

.查詢出來要轉換的資料

select name from dbo.base_pay_type where is_enabled = 1

資料如圖:

2.將查詢到的資料轉換成行,以逗號隔開,以【】包裹

select stuff((select  '

[' + name + '],'

from(select name from dbo.base_pay_type where is_enabled = 1) a for xml path('') ), 1,0, '') as name

如圖:

3,去掉最後乙個逗號

select left(a.name,len(a.name)-1) as name from (select stuff((select  '

[' + name + '],'

from(select name from dbo.base_pay_type where is_enabled = 1) a for xml path('') ), 1,0, '') as name ) as a

如圖:

4,這一行形成新的列,用pivot實現

select *from (

select sellerid,pay_type_name,cast(sum(amount) as

decimal(18,2)) as payamout from

( select distinct oi.order_guid,ss.sellerid,bs.name as pay_type_name,op.amount

from dbo.shop_sellers as ss

left join dbo.order_item oi on ss.sellerid=oi.tracking_id

left join dbo.order_list ol on ol.order_guid =oi.order_guid

left join dbo.order_pay op on ol.order_guid=op.order_guid

left join dbo.base_pay_type bs on op.pay_type_id=bs.pay_type_id

inner join dbo.shops s on s.shopguid=ol.owner

where bs.is_enabled=1 and op.is_received=1 and order_status='

finished

' and pay_status='

paid

'and s.shopid in(select shopid from dbo.shops where

1=1 and shopid=15 or parentshopid=15

) and ol.order_time between

'2018-01-17

' and '

2018-08-17 23:59:59

') a

group by sellerid,pay_type_name) as pa pivot(max( payamout ) for

c#後台**,先將一列轉換成一行,以逗號隔開,【】包裹

string sql = "

select left(a.name,len(a.name)-1) as name from (select stuff((select '[' + name + '],'

from(select name from dbo.base_pay_type where is_enabled = 1) a for xml path('') ), 1, 0, '') as name ) as a";

datatable dt =dbaccess.executetable(sql);

string filwes = dt.rows[0]["

name

"].tostring();

得到的結果如上面標題3,然後拼接sql,將filwes作為引數輸入下面sql語句

select * from (

select sellerid,pay_type_name,cast(sum(amount) as decimal(18,2)) as payamout from (

select distinct oi.order_guid,ss.sellerid,bs.name as pay_type_name,op.amount

from dbo.shop_sellers as ss

left join dbo.order_item oi on ss.sellerid=oi.tracking_id

left join dbo.order_list ol on ol.order_guid = oi.order_guid

left join dbo.order_pay op on ol.order_guid=op.order_guid

left join dbo.base_pay_type bs on op.pay_type_id=bs.pay_type_id

inner join dbo.shops s on s.shopguid=ol.owner

where bs.is_enabled=1 and op.is_received=1 and order_status='finished' and pay_status='paid'

and s.shopid in(select shopid from dbo.shops where 1=1 ) ) a

group by sellerid,pay_type_name) as pa pivot(max( payamout ) for pay_type_name in (『「+filwes+」』))ppa

sql一列轉一行

自定義列名顯示 from criterion t feedingprogramstep 將表中的資料轉換成字串拼接進 var變數,每條資料之間以英文逗號分隔 order byinventoryproportion desc set var stuff var,1 1,去掉 var中的第乙個逗號 ex...

一列多行合併一列一行

方法1 定義臨時的varchar變數,通過游標一條條讀取,然後在迴圈中改變臨時變數的值最終輸出 關於游標的方法,這裡再敘述。sql2008中的方法 create table tb id int,value varchar 10 insert into tb values 1,aa insert in...

把一行裡 , 隔開的資料一行轉換成多行

乙個需求 需要把一行裡 隔開的資料一行轉換成多行 轉換成 sql 如下 select id,nvl substr mm,instr mm,1,lev 1,instr mm,1,lev 1 instr mm,1,lev 1 mm from select id,lev,mm mm from select...