sql2005环境 为员工找银行账号的sql语句,大家来看看啊

devin--- 2007-12-18 09:39:01
大致表结构 BankAccount (ID,Employee,Bank,IsDefault)
一个员工可以有多个账号,但是在一个银行只能有 一个默认账号

如果是默认的结果就为员工找到一个默认的,如果没有默认账号就找一个其中任何一个,求一条SQL语句

要求:不能使用临时表
一个SELECT
...全文
99 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanjs 2008-06-20
  • 打赏
  • 举报
回复


declare @Emppayroll table(ID int,Employee varchar(10),Bank varchar(20))
insert into @Emppayroll select 1,'employee1', '工商银行'
union all select 2,'employee2', '工商银行'
union all select 3,'employee3', '工商银行'
union all select 4,'employee4', '工商银行'

declare @BankAccount table(ID int,Employee varchar(10),Bank varchar(20),Account varchar(20),IsDefault int)
insert into @BankAccount select 1,'employee1','工商银行',1111111,0
union all select 2,'employee1','工商银行',1111122,1
union all select 3,'employee1','工商银行',1111133,0
union all select 4,'employee2','工商银行',2222211,1
union all select 5,'employee3','工商银行',3333311,0
union all select 6,'employee4','工商银行',4444411,0
union all select 7,'employee4','工商银行',4444422,0

select a.Employee,a.bank,[account]=(select top 1 b.account from @BankAccount b
where b.Employee=a.Employee and b.bank=a.bank order by IsDefault desc,id)
from @Emppayroll a
/*
employee1 工商银行 1111122
employee2 工商银行 2222211
employee3 工商银行 3333311
employee4 工商银行 4444411
*/

devin--- 2008-06-20
  • 打赏
  • 举报
回复
没有人解决吗,期待答案.
devin--- 2007-12-19
  • 打赏
  • 举报
回复
Emppayroll员工薪资发放纪录表
(ID,Employee,Bank)
1,employee1,工商银行
2,employee2,工商银行
3,employee3, 工商银行
4,employee4, 工商银行

BankAccount
(ID,Employee,Bank,Account,IsDefault)
1,employee1,工商银行,1111111,0 (1是默认账号,0表示不是默认账号)
2,employee1,工商银行,1111122,1
3,employee1,工商银行,1111133,0
4,employee2,工商银行,2222211,1
5,employee3,工商银行,3333311,0
6,employee4,工商银行,4444411,0
7,employee4,工商银行,4444422,0
得到的结果应该是
employee1,工商银行,1111122
employee2,工商银行,2222211
employee3,工商银行,3333311
employee4,工商银行,4444411

账号表中,员工employee1有三个账号由于有一个默认的账号1111122 也既是账号表的第二条,所以为第二条
员工employee2就一个非默认账号,既是第四条
员工employee3就一个默认账号,既是第五条
员工employee4有两个非默认账号,按顺序取第一条

应该可以明白我的意思了吧







rouqu 2007-12-19
  • 打赏
  • 举报
回复
第一个问题 IsDefault建议用Bit类型 如果是为1 不是为0 允许没填(NULL)

select id, max(isnull(isdefault,0)) from table group by id


第二个问题 "要找出某部分员工薪资发放纪录表中员工所对应的账号"
-------
如果还是按照isdefault选出 则在问题1的基础上+where id in (select distinct id from payroll)
arrow_gx 2007-12-18
  • 打赏
  • 举报
回复
呵呵,回头一看,问题全变味了,原来的问题和现在的问题完全不是一回事,呵呵

dawugui
潇洒老乌龟
等 级:


老大的语句应该可以的
dawugui 2007-12-18
  • 打赏
  • 举报
回复
大致表结构 BankAccount (ID,Employee,Bank,IsDefault)
一个员工可以有多个账号,但是在一个银行只能有 一个默认账号

如果是默认的结果就为员工找到一个默认的,如果没有默认账号就找一个其中任何一个,求一条SQL语句

要求:不能使用临时表
一个SELECT
二楼的是可以解决这个问题,刚才没有考虑好,如果还有一个主表,Emppayroll员工薪资发放纪录表(ID,Employee,Bank)
大致表结构 BankAccount (ID,Employee,Bank,Account,IsDefault)

isDefault 是否是默认账号
两个表以employee and bank 关联

要找出某部分员工薪资发放纪录表中员工所对应的账号


select a.* , b.* from BankAccount a,Emppayroll b where a.employee = b.employee and a.bank = b.bank and a.IsDefault = ?
devin--- 2007-12-18
  • 打赏
  • 举报
回复
二楼的是可以解决这个问题,刚才没有考虑好,如果还有一个主表,Emppayroll员工薪资发放纪录表(ID,Employee,Bank)
大致表结构 BankAccount (ID,Employee,Bank,Account,IsDefault)

isDefault 是否是默认账号
两个表以employee and bank 关联

要找出某部分员工薪资发放纪录表中员工所对应的账号
dawugui 2007-12-18
  • 打赏
  • 举报
回复
IsDefault字段应该设置某个值为唯一吧?
arrow_gx 2007-12-18
  • 打赏
  • 举报
回复



不知道你的 IsDefault 字段是什么,定义的标准是什么,如果下面这句不行,那就吧 desc 去掉就可以了

select top 1 * from BankAccount where ID=职工ID order by IsDefault desc

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧