我正在尝试设置查询以在报告中使用。我的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
很显然,代码没有成功地将分配的数量与它们关联的顺序绑定在一起,但是我无法弄清楚哪里出了问题。任何帮助表示赞赏!
答案 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