1樓:匿名使用者
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
2樓:匿名使用者
--用動態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
最終查詢結果為:
3樓:若水大大
select role.name, user.name from role left join [user] on role.id = user.roleid;
4樓:收費一
select 需要的列 form role a
left join user b on a.id = b.roleid
5樓:匿名使用者
這個需求好奇怪呀.
-------------------
如果有sql能寫出來你需要的那樣查詢結果, 那不是在向r1新增一條記錄就有1列了呀.這樣查出來怎麼在程式層面取值啊.
-----------------
我感覺 應該是你吧需求理解錯了吧
access一對多行,查詢時實現一行多列,sql語句怎麼寫
6樓:匿名使用者
select 員工表.姓名,
max(switch(考勤表.日期='週一',出勤,true,'')) as 週一,
max(switch(考勤表.日期='週二',出勤,true,'')) as 週二,
max(switch(考勤表.日期='週三',出勤,true,'')) as 週三,
max(switch(考勤表.日期='週四',出勤,true,'')) as 週四,
max(switch(考勤表.日期='週五',出勤,true,'')) as 週五
from 員工表,考勤表 where 員工表.id=考勤表.員工id
group by 員工表.姓名
7樓:節子不哭
標準的sql語法可以這麼寫,思想上是一樣的,實現上有點出入可以自己改一改,我覺得這樣查詢效率低了好多,為什麼要這樣的結果呢,
select e.name,
(select a.attendace from attendance_table a where a.id =e.
id and a.week ='monday') monday,
(select a.attendace from attendance_table a where a.id =e.
id and a.week ='tuesday') tuesday,
(select a.attendace from attendance_table a where a.id =e.
id and a.week ='wednesday') wednesday,
(select a.attendace from attendance_table a where a.id =e.
id and a.week ='thursday') thursday,
.........
from employee_table e
8樓:匿名使用者
--因為姓名可能重複,所以不建議用姓名分組,而用id分組
select max(t1.姓名) as 姓名,max(iif(t2.日期='週一',t2.出勤,' ')) as 週一
,max(iif(t2.日期='週二',t2.出勤,' ')) as 週二
,max(iif(t2.日期='週三',t2.出勤,' ')) as 週三
,max(iif(t2.日期='週四',t2.出勤,' ')) as 週四
,max(iif(t2.日期='週五',t2.出勤,' ')) as 週五 from
員工表 t1 left join 考勤表 t2 on t1.id=t2.員工id
group by t1.id
9樓:匿名使用者
其實你可以考慮用transform語句,簡潔多了
sql資料庫一對多關係如何取出多條資料? 10
10樓:匿名使用者
直接在sql中是沒法這麼個結構出來的,需要配合程式語言實現
1、先查詢出使用者列表,然後迴圈使用者列表,再根據使用者跟作品表的關聯查詢到每個使用者的作品資訊
2、分別查詢出使用者表和作品表中的所有資料,再根據使用者和作品的關聯欄位進行資料的組合
11樓:匿名使用者
select * from
(select
--t.id,
t.bigclass,
t.num,
t.smallclass,
t.[content],
t.isquantization,
--t.deptid,
--t.targetvalue,
--t.minvalue,
--t.strivevalue,
--t.score,
--t.belongtoperiod,
--t.quantizationtype,--t.indicatorsepdept,--t.f_createdate,
--t.[status]
dzir.*
,row=row_number() over(partition by t.id order by dzir.createtime desc)
from
dk_zb_deptindicator as tright join
dk_zb_indicatorreport as dzir on dzir.indicatorsid = t.id) as t where t.row = 1
dk_zb_deptindicator 對應你的 user 表
dk_zb_indicatorreport 對應你的 作品表
12樓:節子不哭
不是很明白你具體需要做什麼,**有一對多的關係,取出什麼樣的資料?
13樓:匿名使用者
select * from user left join works on users.id = works.userid group by users.姓名
求一條sql語句,一對多關係拆分多條顯示。
14樓:
select userid,to_char( wm_concat(jobid)) from a group by userid order by userid
Access兩個表一對多關係如何實現查詢
小開文件鋪 select name,學科,學科成績 from 學生表,成績表where 學生表.name 成績表.name 學生表.name 和 成績表.name 做成一對多的關係,使用上述查詢就可以了。此外,不建議用name作聯絡欄位,最好用一個id欄位,因為name可能會重複。有問題可以找我 t...
在vf中,建立一對多關係和永久關係,怎麼判斷是建立主索引
情聖 右擊修改 索引 就可以看啦 主索引 普通索引或者是候選索引 普通索引 沒有什麼大不了的事 主索引是指關鍵字或索引表示式中不允許出現重複值的索引,主索引用於主表或被引用的表,用來在一個永久關係中建立參照完整性。對於一個表而言,只能建立一個主索引。候選索引是可以做主關鍵字的索引,因為它不允許含nu...
SQL如何顯示查詢結果的前100條
橄欖樹島嶼 sql語句顯示查詢結果前100條在不同的資料庫查詢語句不同,分別是 1 在 sqlserver資料庫中 set rowcount 100 goselect from 表名 2 在oracle資料庫中 select from 表名 where rownum 100 3 在mysql資料庫中...