我正在处理的表是一个Employee登录数据库。除其他事项外,它还可以识别员工进入公司的时间,并报告其在一段时间内进入公司的情况。
我现在面临的问题是:老板想查看工人在特定日期的登录和注销工作方式。他想:
a) 设置日期和名称,并让查询返回该员工在该特定日期的访问权限。
b) 如果他没有输入姓名,那么它将返回该日期的所有人列表。
No | Name | ID | Date | Log-in | Log-out | Description
---+------+-----+------------+--------+---------+---------------------
1 | Joe1 | j1 | 2018/10/02 | 09:00 | 18:00 | Normal Exit
2 | Joe2 | j2 | 2018/10/02 | 10:00 | 17:00 | Meeting
.. | ... | . | . . . | . . | . . . | . . . .
N | JoeN | jN | yyyy/mm/dd | hh/mm | hh/mm | Whatever text
所以在第一部分中,我简单地进行了
select *
from DB
where @name = '*the name of the person to look for*'
and @date = '*specific date*' (is a date variable yyyy-mm-dd)
全部完成。现在,下一部分似乎很奇怪,还无法弄清楚。
我尝试将IIF方案作为子查询,但没有完成返回完整列表的部分。
接下来是情况,但也无法使其正常工作。我缺少要检查的变量:
如果没有名字可找=>当天与所有人一起显示桌子
如果有要查找的名称=>仅显示该人的表仅
如何做到这一点,以便我的程序区分显示在最后的表?
干杯!
编辑:
添加(感谢您推荐)查询,以获得更好的帮助
CREATE TABLE DailyRegisters
(
No INTEGER NOT NULL PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
ID VARCHAR(50) NOT NULL,
Date DATE NOT NULL,
Login DATETIME NOT NULL,
Logout DATETIME NOT NULL,
Description VARCHAR(50) NOT NULL
);
INSERT INTO DailyRegisters (No, Name, ID, Date, Login, Logout, Description)
VALUES (1,'Person 1','P1','10/2/2018','9:00','18:00','Normal'),
(2,'Person 2','P2','10/2/2018','9:01','18:00','Normal'),
(3,'Person 3','P3','10/2/2018','10:17','16:00','Plant'),
(4,'Person 4','P4','10/2/2018','10:10','18:00','Normal'),
(5,'Person 1','P1','10/3/2018','9:01','18:00','Normal'),
(6,'Person 2','P2','10/3/2018','9:02','18:00','Normal'),
(7,'Person 3','P3','10/3/2018','9:04','18:00','Normal'),
(8,'Person 1','P1','10/4/2018','9:00','18:00','Normal'),
(9,'Person 2','P2','10/4/2018','9:00','14:00','Meeting'),
(10,'Person 3','P3','10/4/2018','9:17','18:00','Normal'),
(11,'Person 4','P4','10/4/2018','9:00','18:00','Normal'),
(12,'Person 1','P1','10/5/2018','9:00','18:00','Normal'),
(13,'Person 3','P3','10/5/2018','9:00','20:00','Plant'),
(14,'Person 4','P4','10/5/2018','9:00','18:00','Normal');
答案 0 :(得分:0)
您只需要处理未指定名称的情况,就像这样:
select * from DB
where
((@name is not null AND name = @name) or (@name is null))
AND date = @date;
基本上,如果@name参数为null,则上面的查询将不检查名称。当然,不用说@name
和@date
是传递给查询的参数。
我还建议不要使用select *
,而应指定列:如果表架构发生更改,最好进行维护。