SQL Server:如何通过用例的单个查询获得2个不同的查询结果?

时间:2018-10-11 21:19:48

标签: sql sql-server

我正在处理的表是一个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');

1 个答案:

答案 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 *,而应指定列:如果表架构发生更改,最好进行维护。