Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 非连续计数报告-sql server_Sql Server - Fatal编程技术网

Sql server 非连续计数报告-sql server

Sql server 非连续计数报告-sql server,sql-server,Sql Server,我有以下计数 SELECT (SUM(CASE WHEN DeliveryCode = 2 THEN 1 WHEN Customer_id <> Customer_id THEN 1 ELSE 0 END) AS col 如果我们可以假设配送尝试在成功后停止(1),那么我们可以查找客户的最大日期,然后使用该日期及其配送代码检查是否需要重置为0 :(注@params未在rex测试仪

我有以下计数

SELECT (SUM(CASE WHEN DeliveryCode = 2 THEN 1
                 WHEN Customer_id <> Customer_id THEN 1
                 ELSE 0 
                 END) AS col

如果我们可以假设配送尝试在成功后停止(1),那么我们可以查找客户的最大日期,然后使用该日期及其配送代码检查是否需要重置为0

:(注@params未在rex测试仪中定义,因为问题范围已更改)


编辑问题添加一些样本数据和期望的结果会有帮助。请添加一些样本数据和期望的输出
Customer\u id Customer\u id
应该完成什么,这是某种特殊的ISNULL检查吗?添加了一些数据,但是我无法在这里格式化如果客户在不同的日期有不同的包裹会发生什么?“提货”代码是什么?1?或者除2之外的任何内容?在我的查询中链接此项有困难,因为需要将其作为计数列,请您提供帮助-使用UNION、INTERSECT或EXCEPT运算符组合的所有查询在其目标列表中必须具有相同数量的表达式。当人们在一个报告中选择两个日期时,需要计算这个值。请问为什么要成立工会?这难道不是一个派生表,您可以根据customer\u ID连接到它吗?(将上述内容用()让我们将其作为左联接添加到您的查询中,别名此派生表并根据客户ID进行联接。我不确定您现在真正想要的是什么;问题的性质正在发生变化,这使得回答您的评论成为一个新问题。而且,如果一个客户同时有多个配送/包裹,您从未真正回答过该怎么办。需要b使用report builder 3.0时,如果用户更改了报表中的日期参数,则计数必须动态更改。请帮助我,我不能。我不熟悉report builder 3.0。现在,我认为您需要的是一个where子句
,其中ParmStart和ParamEnd之间的mdate
,如果将其加入到您的现有的查询已经在日期上完成了,那么您的查询就完成了。如果此表上只存在日期,则在customer*和派生表的mdate上保留连接,位于paramStart和ParamEnd之间,但该工具可能只允许您进行并集、交集和除外?我不知道……我建议您使用report builder 3.0作为标记,提出一个新问题引用这个问题和你想做的事情。我已经按照建议加入了计数,使用了一个内部连接,只是现在要添加where子句部分…where date在@startdate和enddate之间-请帮助
Customer_id     DATE     DeliveryCode
1             01/01/2017        2
1             02/01/2017        2
1             03/01/2017        2
2             01/01/2017        1
3             01/01/2017        1
3             02/01/2017        1
4             01/01/2017        2
4             02/01/2017        2
4             03/01/2017        1

ID 1 will equal 3
ID 2 will equal 0
ID 3 will equal 0
ID 4 will equal 0
SELECT A.Customer_ID
     , sum(case A.deliveryCode when 2 then 1 else 0 end) * 
       min(Case when A.mDate = MaxDel.MDate and DeliveryCode <> 2 then 0 else 1 end)
       as ActiveConcurrentFailedDelivery
FROM SO50411005 A
LEFT JOIN (SELECT Customer_ID, max(mDate) mDate
           FROM SO50411005
           GROUP BY Customer_ID) MaxDel
  on A.Customer_ID = MaxDel.Customer_ID
WHERE A.mDate between @paramStart and @ParamEnd
GROUP BY A.CUSTOMER_ID
+----+-------------+--------------------------------+
|    | Customer_ID | ActiveConcurrentFailedDelivery |
+----+-------------+--------------------------------+
|  1 |           1 |                              3 |
|  2 |           2 |                              0 |
|  3 |           3 |                              0 |
|  4 |           4 |                              0 |
+----+-------------+--------------------------------+