热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

按老师查询值日表

星期表星期编号星期1星期一2星期二3星期三4星期四5星期五6星期六7星期日值
星期表       
星期编号 星期
1     星期一
2     星期二
3     星期三
4     星期四
5     星期五
6     星期六
7     星期日
值日表
星期编号 值日老师 事件
1      王老师 X
2      李老师
3      王老师 XX
4      黄老师
5      李老师
6      黄老师
7      王老师 XXX


有什么好的方式,可以根据老师查询出他的值日安排?
星期编号 星期 值日老师 事件
1    星期一 王老师   X
2    星期二
3    星期三 王老师   XX
4    星期四
5    星期五
6    星期六
7    星期日 王老师   XXX

12 个解决方案

#1



declare @Tname nvarchar(6)
set @Tname='黄老师' --这里的”黄老师“为要查询的老师姓名
create table 星期表(星期编号 int , 星期 nvarchar(6))

insert into 星期表(星期编号,星期) values(1,'星期一')
insert into 星期表(星期编号,星期) values(2,'星期二')
insert into 星期表(星期编号,星期) values(3,'星期三')
insert into 星期表(星期编号,星期) values(4,'星期四')
insert into 星期表(星期编号,星期) values(5,'星期五')
insert into 星期表(星期编号,星期) values(6,'星期六')
insert into 星期表(星期编号,星期) values(7,'星期日')

create table 值日表(星期编号 int,  值日老师 nvarchar(6), 事件 nvarchar(4))

insert into 值日表(星期编号,值日老师,事件) values(1,'王老师','X')
insert into 值日表(星期编号,值日老师) values(2,'李老师 ')
insert into 值日表(星期编号,值日老师,事件) values(3,'王老师','XX')
insert into 值日表(星期编号,值日老师) values(4,'黄老师')
insert into 值日表(星期编号,值日老师) values(5,'李老师')
insert into 值日表(星期编号,值日老师) values(6,'黄老师')
insert into 值日表(星期编号,值日老师,事件) values(7,'王老师',' XXX')

/*

delete 星期表
delete 值日表

*/

select 星期表.星期编号,星期,值日老师,事件 from 星期表 left outer join (select * from 值日表 where 值日老师=@Tname) as AA on 星期表.星期编号=AA.星期编号

drop table 星期表
drop table 值日表

#2


代码中未对星期表和值日表存在性做检测假装是不存在需要创建并初始化值,如果已经有了可以忽略对应代码。

#3


完善了一下,增加了表存在检查代码,并把null值替换成空白显示,在Sql2005中测试通过


declare @Tname nvarchar(6)
set @Tname='王老师' --这里的”王老师“为要查询的老师姓名,执行时替换成你要查询的老师姓名

if object_id(N'星期表',N'U') is not null
drop table 星期表
if object_id(N'值日表',N'U') is not null
drop table 值日表
create table 星期表(星期编号 int , 星期 nvarchar(6))

insert into 星期表(星期编号,星期) values(1,'星期一')
insert into 星期表(星期编号,星期) values(2,'星期二')
insert into 星期表(星期编号,星期) values(3,'星期三')
insert into 星期表(星期编号,星期) values(4,'星期四')
insert into 星期表(星期编号,星期) values(5,'星期五')
insert into 星期表(星期编号,星期) values(6,'星期六')
insert into 星期表(星期编号,星期) values(7,'星期日')

create table 值日表(星期编号 int,  值日老师 nvarchar(6), 事件 nvarchar(4) default(''))

insert into 值日表(星期编号,值日老师,事件) values(1,'王老师','X')
insert into 值日表(星期编号,值日老师) values(2,'李老师 ')
insert into 值日表(星期编号,值日老师,事件) values(3,'王老师','XX')
insert into 值日表(星期编号,值日老师) values(4,'黄老师')
insert into 值日表(星期编号,值日老师) values(5,'李老师')
insert into 值日表(星期编号,值日老师) values(6,'黄老师')
insert into 值日表(星期编号,值日老师,事件) values(7,'王老师',' XXX')

/*

delete 星期表
delete 值日表

*/

select 星期表.星期编号,星期,case when 值日老师 is null then '' else 值日老师 end as 值日老师,case when 事件 is null then '' else 事件 end as 事件 from 星期表 left outer join (select * from 值日表 where 值日老师=@Tname) as AA on 星期表.星期编号=AA.星期编号

if object_id(N'星期表',N'U') is not null
drop table 星期表
if object_id(N'值日表',N'U') is not null
drop table 值日表

#4


--测试数据
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([星期编号] int,[星期] nvarchar(23))
Insert #T1
select 1,N'星期一' union all
select 2,N'星期二' union all
select 3,N'星期三' union all
select 4,N'星期四' union all
select 5,N'星期五' union all
select 6,N'星期六' union all
select 7,N'星期日'
GO
if not object_id(N'Tempdb..#T2') is null
drop table #T2
Go
Create table #T2([星期编号] int,[值日老师] nvarchar(23),[事件] nvarchar(23))
Insert #T2
select 1,N'王老师',N'X' union all
select 2,N'李老师',null union all
select 3,N'王老师',N'XX' union all
select 4,N'黄老师',null union all
select 5,N'李老师',null union all
select 6,N'黄老师',null union all
select 7,N'王老师',N'XXX'
Go
--测试数据结束
SELECT  #T1.* ,
        #T2.值日老师 ,
        #T2.事件
FROM    #T1
        JOIN #T2 ON #T2.星期编号 = #T1.星期编号;

#5


3楼正确
4楼结果不对。

不知还有没有更好的方法

#6


--测试数据
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([星期编号] int,[星期] nvarchar(23))
Insert #T1
select 1,N'星期一' union all
select 2,N'星期二' union all
select 3,N'星期三' union all
select 4,N'星期四' union all
select 5,N'星期五' union all
select 6,N'星期六' union all
select 7,N'星期日'
GO
if not object_id(N'Tempdb..#T2') is null
drop table #T2
Go
Create table #T2([星期编号] int,[值日老师] nvarchar(23),[事件] nvarchar(23))
Insert #T2
select 1,N'王老师',N'X' union all
select 2,N'李老师',null union all
select 3,N'王老师',N'XX' union all
select 4,N'黄老师',null union all
select 5,N'李老师',null union all
select 6,N'黄老师',null union all
select 7,N'王老师',N'XXX'
Go
--测试数据结束
SELECT  #T1.* ,
        t.值日老师 ,
        t.事件
FROM    #T1
        LEFT JOIN ( SELECT  *
                    FROM    #T2
                    WHERE   值日老师 = '王老师'
                  ) t ON t.星期编号 = #T1.星期编号;




#7


楼上可以了。 不过这都只能一个老师一个老师关联才行。
如果一次性像这样把所有老师的安排选出来。又该怎样呢?

#8


引用 7 楼 ydtpan 的回复:
楼上可以了。 不过这都只能一个老师一个老师关联才行。
如果一次性像这样把所有老师的安排选出来。又该怎样呢?

没太理解楼主的意思,4#的代码可以吗?不可以的话,楼主可以写出想要的结果,或者看看其他人怎么理解

#9


SELECT A.[星期编号],
                 A.[星期],
                 B.[值日老师],
                 B.[事件] 
FROM TABLE1 A
LEFT JOIN
         (SELECT * FROM TABLE2 WHERE ISNULL([事件],'')<>'') AS B
ON A.[星期编号]=B.[星期编号]

#10


楼上方法,黄老师的一周数据不全。
--测试数据
if not object_id(N'Tempdb..#T1') is null
    drop table #T1
Go
Create table #T1([星期编号] int,[星期] nvarchar(23))
Insert #T1
select 1,N'星期一' union all
select 2,N'星期二' union all
select 3,N'星期三' union all
select 4,N'星期四' union all
select 5,N'星期五' union all
select 6,N'星期六' union all
select 7,N'星期日'
GO
if not object_id(N'Tempdb..#T2') is null
    drop table #T2
Go
Create table #T2([星期编号] int,[值日老师] nvarchar(23),[事件] nvarchar(23))
Insert #T2
select 1,N'王老师',N'X' union all
select 2,N'李老师',null union all
select 4,N'王老师',N'XX' union all
select 4,N'黄老师',N'AA' union all
select 5,N'李老师',null union all
select 6,N'黄老师',N'AAA' union all
select 7,N'王老师',N'XXX'
Go
--测试数据结束

SELECT A.[星期编号],
                 A.[星期],
                 B.[值日老师],
                 B.[事件] 
FROM #T1 A
left outer join 
         (SELECT * FROM #T2 WHERE ISNULL([事件],'')<>'') AS B
ON A.[星期编号]=B.[星期编号] 

要的结果应该是这样子:
1 星期一 王老师 X
2 星期二 王老师
3 星期三 王老师 XX
4 星期四 王老师
5 星期五 王老师
6 星期六 王老师
7 星期日 王老师  XXX
1 星期一 黄老师  
2 星期二 黄老师
3 星期三 黄老师  
4 星期四 黄老师  AA
5 星期五 黄老师
6 星期六 黄老师  AAA
7 星期日 黄老师   

#11


--测试数据
if not object_id(N'Tempdb..#T1') is null
    drop table #T1
Go
Create table #T1([星期编号] int,[星期] nvarchar(23))
Insert #T1
select 1,N'星期一' union all
select 2,N'星期二' union all
select 3,N'星期三' union all
select 4,N'星期四' union all
select 5,N'星期五' union all
select 6,N'星期六' union all
select 7,N'星期日'
GO
if not object_id(N'Tempdb..#T2') is null
    drop table #T2
Go
Create table #T2([星期编号] int,[值日老师] nvarchar(23),[事件] nvarchar(23))
Insert #T2
select 1,N'王老师',N'X' union all
select 2,N'李老师',null union all
select 4,N'王老师',N'XX' union all
select 4,N'黄老师',N'AA' union all
select 5,N'李老师',null union all
select 6,N'黄老师',N'AAA' union all
select 7,N'王老师',N'XXX'
Go
--测试数据结束
SELECT  a.星期编号 ,
        a.星期 ,
        t.值日老师 ,
        b.事件
FROM    #T1 A
        CROSS APPLY ( SELECT DISTINCT
                                值日老师
                      FROM      #T2
                    ) t
        LEFT JOIN #T2 b ON t.值日老师 = b.值日老师
                           AND a.星期编号 = b.星期编号



#12




就是要这样子的,非常感谢!

推荐阅读
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • MySQL外键1对多问题的解决方法及实例
    本文介绍了解决MySQL外键1对多问题的方法,通过准备数据、创建表和设置外键关联等步骤,实现了用户分组和插入数据的功能。详细介绍了数据准备的过程和外键关联的设置,以及插入数据的示例。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
author-avatar
乐民修德
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有