热门标签 | 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




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

推荐阅读
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 数据类型和操作数据表2.1MySQL类型之整型2.2MySQL数据类型之浮点型2.3日期时间型DATE1支持时间:1000年1月1日~9999年12月31日DATETIME ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文介绍如何使用线段树解决洛谷 P1531 我讨厌它问题,重点在于单点更新和区间查询最大值。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 本文介绍了在 Spring Boot 中使用 JPA 进行数据删除操作时遇到的 SQL 错误及其解决方法。错误表现为:删除操作失败,原因是无法打开 JPA EntityManager 以进行事务处理。 ... [详细]
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社区 版权所有