【问题标题】:SSRS Sql query with when clause and input parameter带有when子句和输入参数的SSRS Sql查询
【发布时间】:2014-09-27 00:50:09
【问题描述】:

我正在尝试让 SQL 查询在 SSRS 中工作。 当我在 SSRS 中执行我的报告时,将执行此查询。这是一个简单地填充我的数据集的选择。 我想在第一次执行报告执行时获得日期,然后我希望用户能够在需要时输入不同的日期,因此需要参数。 这里是:

Select contrat from contrats ctr, 
INNER JOIN structure rs ON rs.id = ctr.id 
INNER JOIN structure_members rsm ON rsm.id_structure = rs.id_structure
where 
(((Date(ctr.date) = CASE WHEN ? IS NULL THEN Date(Now) END) or
(Date(rs.endDate) = CASE WHEN ? IS NULL THEN Date(Now) END)
GROUP BY crt.contrat

不要介意任何语法错误,我只是简化了查询以达到重点:这可能吗? 这样结束可以办案吗?

`CASE WHEN ? IS NULL THEN Date(Now)` 

那个?是我输入的日期,例如 2014-08-04。如果我愿意,该值可以为 null。这就是为什么我试图检查它是否为空,然后使用 Date(now) 来完成查询。

感谢您的帮助。

【问题讨论】:

    标签: sql sql-server reporting-services case-when


    【解决方案1】:

    试试这个:

    Select contrat from contrats ctr 
    INNER JOIN structure rs ON rs.id = ctr.id 
    INNER JOIN structure_members rsm ON rsm.id_structure = rs.id_structure
    where
    Date(ctr.date) = ISNULL(?,Today())
    or
    Date(rs.enddate) = ISNULL(?,Today())
    GROUP BY crt.contrat
    

    CASE 语句可以替换为使用ISNULL 来获取空输入的默认值并在比较中使用它。如果参数不为空,则比较参数值,否则比较今天的日期。

    【讨论】:

    • 好像他不喜欢 getdate()...所以我尝试了 DATE(NOW()) 就像我习惯的那样,它也没有工作。我认为这种情况正在起作用
    • 好的,我手头没有 SSRS,所以我无法测试,但这应该让你知道如何做。你在哪里调用这个查询?
    • 这是一份报告,因此它会填充我的数据集。数据集用适当的数据填充报表。因此,我们只想拥有特定日期的合同。因此,我们第一次执行报告时,我们希望显示 now() 或 curdate() 值,并让用户根据需要选择另一个日期。
    • 好的,我编辑了我的帖子以改用Today 函数。让我知道这是否有效。
    • 仍然给我一个错误:执行数据集“myDataset”的查询失败。 SQL0204:在 *LIBL 中找不到类型 *N 的今天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多