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 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 白菜 ... 你partition by語句裡面的右括號好像格式有問題,但你rank後面的右括號好像又是對的。寫的很清楚了,你看看你的mysql什麼版本的,老版本的都是不支援這幾個分組排序的函式的 看你的mysql版本是什麼,應該是你的版本不支援,mysql8以後才支援查詢分析函式 sql 語句報錯,求大神解答 ... 如果手機無法進行資料流量上網,建議進行以下步驟操作 1 檢查sim卡是否開通gprs上網業務或被臨時關閉。使用手機資料上網功能,卡需開通資料流量上網業務。可以聯絡 卡當地的網路 商,開通資料流量上網業務。2 檢查 移動資料 開關是否開啟。用手指向下滑動螢幕頂簾,把 移動資料 點為綠色。若以上操作後仍...oracle資料庫行轉列,Oracle 資料庫行轉列
SQL語句中第二行partition by部分出錯,求解答
資料流量咋不能用,資料流量不能用