【发布时间】:2020-02-04 12:57:01
【问题描述】:
基本细节
+----+---------------------+
| DocumentId | DocumentNo |
+----+---------------------+
| 1 | 100 |
+----+---------------------+
订单项
+----+--------+------------+
| Id | ItemNo | DocumentId |
+----+--------+------------+
| 1 | 4001 | 1 |
| 2 | 4002 | 1 |
| 3 | 4003 | 1 |
| 4 | 4004 | 1 |
+----+--------+------------+
选择列表
+----+------------+---------------+--------+----------+------------+
| Id | DocumentNo | ReservationNo | ItemNo | StatusId | PickListNo |
+----+------------+---------------+--------+----------+------------+
| 1 | 100 | 100 | 4001 | 1 | 0000001 |
| 2 | 100 | 100 | 4002 | 2 | 0000001 |
| 3 | 100 | 100 | 4001 | 2 | 0000002 |
| 4 | 100 | 100 | 4003 | 2 | 0000002 |
+----+------------+---------------+--------+----------+------------+
期望的结果:
+----+------------+----------------+
| Id | DocumentNo | LineItemCount |
+----+------------+----------------+
| 1 | 100 | 3 |
+----+------------+----------------+
主表中的基本详细信息。 BasicDetails 中的一个条目可能有多个 LineItems。
ItemNo 在 lineItem 中是唯一的。
BasicDetails 可能有多个pickList。
例如:
DocumentNo 100 here has two pickLists 0000001 and 0000002
0000001 和 0000002 中可能有相同的 itemno,但同一选项列表不能有重复的 itemno。
选择列表方案 2:
+----+------------+---------------+--------+----------+------------+
| Id | DocumentNo | ReservationNo | ItemNo | StatusId | PickListNo |
+----+------------+---------------+--------+----------+------------+
| 1 | 100 | 100 | 4001 | 2 | 0000001 |
| 2 | 100 | 100 | 4002 | 2 | 0000001 |
| 3 | 100 | 100 | 4001 | 2 | 0000002 |
| 4 | 100 | 100 | 4003 | 2 | 0000002 |
+----+------------+---------------+--------+----------+------------+
想要的结果:
+----+------------+----------------+
| Id | DocumentNo | LineItemCount |
+----+------------+----------------+
| 1 | 100 | 4 |
+----+------------+----------------+
选择列表场景 3:
+----+------------+---------------+--------+----------+------------+
| Id | DocumentNo | ReservationNo | ItemNo | StatusId | PickListNo |
+----+------------+---------------+--------+----------+------------+
| 1 | 100 | 100 | 4001 | 1 | 0000001 |
| 2 | 100 | 100 | 4002 | 2 | 0000001 |
| 3 | 100 | 100 | 4001 | 1 | 0000002 |
| 4 | 100 | 100 | 4003 | 2 | 0000002 |
+----+------------+---------------+--------+----------+------------+
期望的结果是:
+----+------------+----------------+
| Id | DocumentNo | LineItemCount |
+----+------------+----------------+
| 1 | 100 | 3 |
+----+------------+----------------+
我的查询:
select b.documentid,b.documentno,count(l.id) cnt
from basicdetails b left join lineitems l on b.documentid= l.documentid
left join picklist p on l.itemno =p.itemno where p.statusid=1
group by b.documentid,b.documentno
【问题讨论】:
-
您的问题是什么?你想达到什么目的?
-
@Cid 我很难用语言解释。这就是为什么我给出了多个场景。 documentno 100 的 lineitems 中有 4 个不同的 itemno,即.. 4001,4002,4003,4004。其中,如果在选项列表 4001 中标记为 1,则意味着现在我们只剩下 3 个条目编号用于文档编号 100。如果 4001 和 4002 都为 1,那么条目编号将是 2。选项列表中重复的 4001 被计为一个 4001跨度>
-
嗨@SamuraiJack,你能解释一下你有 LineItemCount = 3 的场景3吗?谢谢!
-
这里的输出毫无意义。有些业务规则您没有共享,或者至少它们根本不清楚。您得到的计数与您提供的解释相矛盾。
标签: sql sql-server tsql sql-server-2008