参数查询
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)))
这将显示订单日期或完成日期在 @odate1
和 odate2
之间的所有记录
还有
将 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
过滤掉所有未将 OrderInPeriod
或 CompletedInPeriod
设置为 1
的记录
我有一个简单的脚本,可以显示特定产品的订购日期和订单完成日期。
在图表上,我试图显示某个日期之间订购的数量和同一日期之间完成的数量。
我遇到的问题是在我使用的脚本中:
和 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)))
这将显示订单日期或完成日期在 @odate1
和 odate2
还有
将 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
过滤掉所有未将 OrderInPeriod
或 CompletedInPeriod
设置为 1