参数查询

Parameter query

我有一个简单的脚本,可以显示特定产品的订购日期和订单完成日期。

在图表上,我试图显示某个日期之间订购的数量和同一日期之间完成的数量。

我遇到的问题是在我使用的脚本中:

和 job.orderdate 在 (@odate1) 和 (odate2) 之间

这对于显示新订单来说绝对没问题。但是,当我对已完成的订单使用相同的参数时,它显然只显示在上述参数之间完成的作业。

例如,如果我输入 11 月的日期参数,它会显示:

50 个订单 完成 25 个作业

它不会向我显示的是,如果某项工作在 11 月完成,而订单并未在 11 月开始。所以我可能有一个例子,其中 15 个其他工作在 11 月完成,但因为他们的开始日期是 10 月,所以他们不会完成。

任何人都可以建议一种使这些数据通过的方法吗?我想要做的就是展示一个图表,显示:新订单和已完成订单。

谢谢

如果要显示某个日期之间的 Job Orders,或某个日期之间的 Jobs Completed,查询肯定需要使用 OR 语句

WHERE ...
AND ((job.orderdate BETWEEN (@odate1) AND (odate2)) 
OR (job.completeddate BETWEEN (@odate1) AND (odate2)))

这将显示订单日期或完成日期在 @odate1odate2

之间的所有记录

还有

将 BETWEEN 与日期一起使用可以使您进入 all sorts of trouble

最好使用 > 和 < 比较已知日期。用这种方法重写上面的内容将是

WHERE ...
AND (((job.orderdate >= @odate1) AND (job.orderdate <= odate2)) 
OR ((job.completeddate >= @odate1) AND (job.completeddate <= odate2)))

更新

您可以为每条记录设置单独的标志,以显示它是否符合

的条件
  • 在此日期期间订购
  • 在此日期期间完成

使用 CASE 语句如下

SELECT ...
    CASE 
        WHEN ((job.orderdate >= @odate1) AND (job.orderdate <= odate2)) 
        THEN 1 
        ELSE 0 
    END AS OrderInPeriod
    CASE 
        WHEN ((job.completeddate >= @odate1) AND (job.completeddate <= odate2)) 
        THEN 1 
        ELSE 0 
    END AS CompletedInPeriod
FROM myTABLE
WHERE ...
AND (((job.orderdate >= @odate1) AND (job.orderdate <= odate2)) 
OR ((job.completeddate >= @odate1) AND (job.completeddate <= odate2)))

然后您可以根据这些标志在报告中求和,或根据这些过滤器过滤 tablix,或在您的报告中以其他方式使用它们,即

创建一个新的 Tablix 过滤器,表达式设置为

 =iif((Fields!OrderInPeriod.Value = 1) OR (Fields!CompletedInPeriod.Value = 1), 1, 0)

然后 Operator = "=" 和 Value = 1

过滤掉所有未将 OrderInPeriodCompletedInPeriod 设置为 1

的记录