sql行轉列不能用迴圈和拼接,sql 行轉列 不能用迴圈和拼接

2022-06-30 20:56:41 字數 5823 閱讀 3837

1樓:匿名使用者

delimiter &&

drop procedure

if exists qurey_status;

create procedure qurey_status() reads sql data

begin

set @sql = null; --建立一條sql語句

select

group_concat( distinct concat( 'max(if(t1.alarm_netype = ''', t1.alarm_netype, ''', t2.

level_name, 0)) as ''', t1.alarm_netype, '\'' ) ) into @sql

from

t_alarm_current t1

left join t_dim_alarm_level t2 on t2.level_name = t1.alarm_level; --通過select查詢來動態拼接sql語句

set @sql = concat( 'select t1.alarm_region, (select level_name from t_dim_alarm_level where level_num=max(t2.level_num)) status, ', @sql, ' from t_alarm_current t1

left join t_dim_alarm_level t2 on t2.level_name = t1.alarm_level

group by t1.alarm_region order by status desc'); --根據需求拼接完整的sql語句

prepare stmt

from @sql; --自定義執行

execute stmt; --執行

deallocate prepare stmt; --刪除

end &&

delimiter;

call qurey_s

2樓:曾寅彪

select t.商品編號,c.sum101,b.sum102 from ( select distinct 商品編號 from a ) t left join (

select 商品編號,sum(數量) as sum101 from a where 帳戶 = 101 group by 商品編號) c

on t.商品編號 = c.商品編號

left join (

select 商品編號,sum(數量) sum102 from a where 帳戶 = 102 group by 商品編號) b

on t.商品編號 = b.商品編號

3樓:

純sql只能做到固定列

迴圈拼接sql語句條件

4樓:一蘅新

string tmp="select * from tablename where id in(";

for(int i=0;i

5樓:

補下樓上的吧

string tmp="select * from tablename where id in(";

for(int i=0;i

sql中一對多關係的查詢結果的多行轉換成一行多列

6樓:匿名使用者

1、建立測試表,

create table test_fee(userid number, feeid number, fee number);

2、插入測試資料

insert into test_fee values(1,1001,80);

insert into test_fee values(1,1002,70);

insert into test_fee values(1,1003,90);

insert into test_fee values(1,1004,60);

insert into test_fee values(2,1001,99);

insert into test_fee values(2,1002,66);

insert into test_fee values(2,1001,55);

3、查詢表中所有記錄,select t.*, rowid from test_fee t,

4、編寫sql,按userid彙總,根據不同的feeid,進行行轉列彙總,

select userid,

sum(case when feeid = 1001 then fee else 0 end) as fee_1001,

sum(case when feeid = 1002 then fee else 0 end) as fee_1002,

sum(case when feeid = 1003 then fee else 0 end) as fee_1003,

sum(case when feeid = 1004 then fee else 0 end) as fee_1004

from test_fee t

group by userid

7樓:匿名使用者

--用動態sql實現行轉列。因用到了row_number,只適用於sql server 2005及以上版本

--測試資料

with

[user](id,name,roleid)

as(select 1,'bobo','r1' union all

select 2,'coco','r1' union all

select 3,'dodo','r1' union all

select 4,'eoeo','r2' union all

select 5,'fofo','r2'),

[role](id,name)

as(select 'r1','admin' union all

select 'r2','user')

--兩表聯合查詢後暫存入臨時表

select b.id roleid,b.name rolename,a.

name username,row_number() over (partition by b.id order by a.id) seq

into #t

from [user] a

inner join [role] b on a.roleid=b.id;

--拼接動態sql

declare @sql varchar(max);

set @sql='';

select @sql=@sql+

',max(case seq when '+cast(tt.seq as varchar)+' then username else '''' end) user'+cast(tt.seq as varchar)

from (select distinct seq from #t) tt

order by seq;

set @sql='select rolename'+@sql+' from #t group by roleid,rolename';

--列印動態sql

select @sql;

--執行動態sql

exec(@sql);

--刪除臨時表

drop table #t;

生成的動態sql為:

select rolename,

max(case seq when 1 then username else '' end) user1,

max(case seq when 2 then username else '' end) user2,

max(case seq when 3 then username else '' end) user3

from #t group by roleid,rolename

最終查詢結果為:

8樓:若水大大

select role.name, user.name from role left join [user] on role.id = user.roleid;

9樓:收費一

select 需要的列 form role a

left join user b on a.id = b.roleid

10樓:匿名使用者

這個需求好奇怪呀.

-------------------

如果有sql能寫出來你需要的那樣查詢結果, 那不是在向r1新增一條記錄就有1列了呀.這樣查出來怎麼在程式層面取值啊.

-----------------

我感覺 應該是你吧需求理解錯了吧

sql語句行轉列 怎麼轉啊

11樓:匿名使用者

如果你的 num1, num2, ...... num... 數字是不確定的

那麼只用 sql 語句處理, 恐怕是有的麻煩了可能要用儲存過程來處理了。

可以參考下面的貼子。

動態行列轉換處理 例子:

12樓:鈄又蓮

select 姓名,地址, wmsys.wm_concat(value1),max(**) 編號 from 表a group by 姓名,地址

看max(**)

sql 行轉列,如圖所示是每個人每天的考勤打卡資料,怎樣可以把每個人的刷卡時間橫著顯示

13樓:尚子素

name rq 上班一 下班一 上班二 下班二 其他

name1 2016-09-01 8:20 18:54 null null

name2 2016-09-01 8:10 11:40 19:20 null null

name3 2016-09-01 8:20 12:10 18:34 null null

name4 2016-09-01 8:29 12:20 18:34 22:02 null

14樓:匿名使用者

set @tmp=right(@tmp,len(@tmp)-1)

把第一個逗號去掉

動態錶行轉列怎麼實現,sql語句或儲存過程都可以。求指教。

15樓:匿名使用者

可以使用動態行列轉換,先拼出相關的sql語句的字串,再用exec 來執行。

16樓:

那你用儲存過程。 先預讀出資料內容,多少行。 然後用 loop迴圈。使用動態sql拼接。這樣就能實現了

關於sqlserver 字串型別的行轉列,該怎麼解決

17樓:牛桖容

編寫一個函式

create func sum_value(@kid int)

returns varchar(1000)as begin

declare @s varchar(1000)set @s= ' '

select @s+=value+『,』 from tb where kid=@kid

return @s

end然後呼叫

select kid,sum_value(kid) from tb group by kid

oracle資料庫行轉列,Oracle 資料庫行轉列

create table a 名稱 varchar2 10 1月 varchar2 10 2月 varchar2 10 3月 varchar2 10 4月 varchar2 10 insert into a values 土豆 50,60,70,80 insert into a values 白菜 ...

SQL語句中第二行partition by部分出錯,求解答

你partition by語句裡面的右括號好像格式有問題,但你rank後面的右括號好像又是對的。寫的很清楚了,你看看你的mysql什麼版本的,老版本的都是不支援這幾個分組排序的函式的 看你的mysql版本是什麼,應該是你的版本不支援,mysql8以後才支援查詢分析函式 sql 語句報錯,求大神解答 ...

資料流量咋不能用,資料流量不能用

如果手機無法進行資料流量上網,建議進行以下步驟操作 1 檢查sim卡是否開通gprs上網業務或被臨時關閉。使用手機資料上網功能,卡需開通資料流量上網業務。可以聯絡 卡當地的網路 商,開通資料流量上網業務。2 檢查 移動資料 開關是否開啟。用手指向下滑動螢幕頂簾,把 移動資料 點為綠色。若以上操作後仍...