如何基于表2中的共享订单ID返回表1中唯一ID的计数并受Date参数限制

时间:2019-01-22 21:34:41

标签: sql-server

我正在尝试设置查询以在报告中使用。我的sql-server数据库有一个表(dbo.assignment),其中列出了系统中每个唯一工作分配的一行。第二个表是一个临时表(#OpenOrder),由包含所有订单ID的单独表(dbo.orderschedule)构成。该报告应该在每个订单ID上显示一行,然后在该列中显示在特定日期输入的,分配相同订单ID的每个分配ID的计数。

[dbo.assignment]列:

 [StaffingOrderGUID],[AssignmentID],[DateEntered]

[dbo.orderschedule]列:

[StaffingOrderGUID],[StaffingOrderID]

我尝试使用INNER JOIN返回staffingorderguid(两个表之间共享的唯一值)上的匹配项,当我排除日期条件时,每个订单都会得到66个分配ID,这绝对不是正确,因为大多数订单仅绑定1-3个任务。如果我使用LEFT JOIN,我将获得整个系统中的总分配数量,但是问题是,这给了我每个订单的数量,而没有显示仅与单个订单相关的分配ID。

当我添加WHERE语句以将DateEntered与在@StartDate参数上选择的日期相关联时,无论我使用INNER还是LEFT JOIN,任何顺序的结果都为零。 / p>

UPDATE #OpenOrder
SET SupervisorName = (SELECT COUNT (DISTINCT ag.AssignmentGUID)
FROM dbo.Assignment AS ag
     INNER JOIN #OpenOrder oe ON ag.StaffingOrderGUID = oe.StaffingOrderGUID
WHERE ag.DateEntered = @StartDate)

我希望该代码在实际报告中返回如下内容:

Order ID: 1111 | Assignments: 3 
Order ID: 1112 | Assignments: 2
Order ID: 1113 | Assignments: 0

我得到的是这个。当我使用INNER JOIN时:

Order ID: 1111 | Assignments: 66
Order ID: 1112 | Assignments: 66
Order ID: 1113 | Assignments: 66

当我使用LEFT JOIN时:

Order ID: 1111 | Assignments: 200092
Order ID: 1112 | Assignments: 200092
Order ID: 1113 | Assignments: 200092

当我添加WHERE语句以按日期限制时:

Order ID: 1111 | Assignments: 0
Order ID: 1112 | Assignments: 0
Order ID: 1113 | Assignments: 0

很显然,代码没有成功地将分配的数量与它们关联的顺序绑定在一起,但是我无法弄清楚哪里出了问题。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

一种方法是使用您的聚合联接派生表。您在所有行的子查询中获得相同值的原因是因为外部查询UPDATE的{​​{3}}。请注意,JOIN到您要在子查询中更新的同一张表上,并未使其与UPDATE

中的行相关联
UPDATE O
SET O.SupervisorName = ag.CT
FROM  #OpenOrder O
INNER JOIN
    (select  
        count(distinct AssignmentGUID) as CT
        ,StaffingOrderGUID 
    from  dbo.Assignment 
    group by StaffingOrderGUID) ag on ag.StaffingOrderGUID = O.StaffingOrderGUI