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 檢查 移動資料 開關是否開啟。用手指向下滑動螢幕頂簾,把 移動資料 點為綠色。若以上操作後仍...