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

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

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

要求:不能使用临时表
一个SELECT
...全文
128 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

内容概要:本文系统阐述了基于线性与非线性状态空间模型预测控制(MPC)的四旋翼无人机轨迹跟踪对比仿真研究,包含完整的Simulink仿真模型、详细的技术讲解与说明文档,属于硕士论文级别的复现阶段。研究围绕四旋翼飞行器的动力学建模展开,分别构建线性MPC与非线性MPC控制器,深入比较两者在复杂轨迹跟踪任务中的控制性能差异,重点评估其在轨迹精度、动态响应速度、系统稳定性及抗干扰能力等方面的表现。文中提供了从状态方程推导、约束条件设定、代价函数设计到仿真结果分析的全流程实现细节,有助于读者全面掌握MPC在高阶非线性系统中的应用机制与工程实现方法。; 适合人群:具备自动控制原理、现代控制理论(特别是状态空间方法)、非线性系统建模及MATLAB/Simulink仿真能力的研究生、科研人员,以及从事无人机飞控系统开发、先进控制算法研究的工程技术人员。; 使用场景及目标:① 学习并掌握线性与非线性MPC在四旋翼系统中的建模与控制器设计方法;② 对比分析两种MPC策略在实际轨迹跟踪中的性能优劣,理解其适用边界与局限性;③ 支持硕士论文复现、科研项目验证、控制算法优化与教学案例开发。; 阅读建议:建议结合所提供的完整仿真模型逐步操作,重点理解系统线性化处理方法、预测时域与控制时域的设置、状态与输入约束的处理机制,以及非线性MPC的实时优化求解过程。同时推荐配合经典控制理论教材与MPC专著进行延伸学习,以实现从理论推导到仿真验证的闭环掌握。

27,580

社区成员

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

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