【问题标题】:t-SQL greater/less than more than one valuet-SQL 大于/小于一个值
【发布时间】:2021-05-26 15:24:08
【问题描述】:

我遇到了一个奇怪的问题:

我有一个结构如下的简单表格:

tbl1

Username | DateOfSell
  Jack     2021/04/04
  Joe      2021/04/14
  Jack     2021/05/20
  Joe      2021/04/11
  Jack     2021/05/01

另一张包含员工、编号、雇用日期和解雇日期的信息

tbl2

Username | Phone | DateOfStart | DateOfEnd
  Jack     02541   2010/01/01   2021/05/21
   Joe     08522   2012/06/01       NULL

我需要创建一个查询,仅当员工在某个日期仍在工作时才选择该员工。 例如在这种情况下:

SELECT * 
FROM tbl1 JOIN tbl2 (..) 
WHERE tbl1.DateOfSell < tbl2.DateOfEnd

没关系,但我需要(出于 SSRS 目的)能够检查多个日期。

如果在 SSRS 中我有一个参数,其中包含实际日期和前一天以及过去一周的日期,我该怎么办?

所以:今天()= 2021/05/26 前一周:2021/05/19

SELECT * 
FROM tbl1 JOIN tbl2 (..) 
WHERE  '2021/05/26' < tbl2.DateOfEnd

我不想要任何结果,因为现在这个员工不再工作了。

SELECT * 
FROM tbl1 JOIN tbl2 (..) 
WHERE  '2021/05/19' < tbl2.DateOfEnd

在这种情况下,我需要结果,因为截至日期,该员工仍在工作。

如果我在参数报告中输入了两个(或更多)值怎么办?

显然我有一个错误An expression of non-boolean type specified in a context where a condition is expected, near ','

有办法解决这个问题吗?

谢谢!

【问题讨论】:

  • "一个包含实际日期和前一天以及过去一周的一天的参数" 我认为一个参数不能有 3 个并发值。请更好地解释这一点。
  • 不清楚你想要什么:你想要来自 tbl1 的所有行,但前提是它们在 DateOfStartDateOfEnd 内,或者不相关并且你只想要来自 @987654330 的行@ 在指定的日期(那么tbl2 是如何进来的)?或两者?逻辑不清楚,预期的输出会有所帮助

标签: sql sql-server ssrs-2012


【解决方案1】:

也许这个查询可以解决问题

declare @dtparam date = '2021-01-10'

select *
from tbl1 t1
  join tbl2 t2
    on t1.Username = t2.Username
where t2.dateOfStart <= @dtparam
  and (
    t2.DateOfEnd >= @dtparam or
    t2.DateOfEnd is null
  )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    相关资源
    最近更新 更多