【发布时间】:2017-06-07 21:35:27
【问题描述】:
在 SSMS 2016 中,我有一个带有各种连接的 select 语句,它为我提供了以下数据:
| box_barcode | order_number | order_shipment_id | item | qty |
|-------------|--------------|-------------------|----------|-----|
| 3330000001 | 0000105 | FP001 | tshirt-S | 1 |
| 3330000001 | 0000105 | FP001 | tshirt-M | 2 |
| 3330000001 | 0000105 | FP001 | tshirt-L | 2 |
| 3330000005 | 0000108 | FP002 | shorts-S | 2 |
| 3330000005 | 0000108 | FP002 | shorts-M | 1 |
| 3330000005 | 0000120 | FP002 | shorts-S | 1 |
| 3330000010 | 0000120 | FP003 | shirts-M | 2 |
| 3330000010 | 0000120 | FP003 | shirts-L | 2 |
| 3330000010 | 0000121 | FP003 | shirts-S | 3 |
| 3330000010 | 0000121 | FP003 | shirts-M | 3 |
| 3330000010 | 0000122 | FP003 | shirts-S | 2 |
我想添加一列来计算每个 box_barcode 的不同 order_numbers 的数量,以获得所需的结果:
| box_barcode | order_number | order_shipment_id | item | qty | count |
|-------------|--------------|-------------------|----------|-----|-------|
| 3330000001 | 0000105 | FP001 | tshirt-S | 1 | 1
| 3330000001 | 0000105 | FP001 | tshirt-M | 2 | 1
| 3330000001 | 0000105 | FP001 | tshirt-L | 2 | 1
| 3330000005 | 0000108 | FP002 | shorts-S | 2 | 2
| 3330000005 | 0000108 | FP002 | shorts-M | 1 | 2
| 3330000005 | 0000120 | FP002 | shorts-S | 1 | 2
| 3330000010 | 0000120 | FP003 | shirts-M | 2 | 3
| 3330000010 | 0000120 | FP003 | shirts-L | 2 | 3
| 3330000010 | 0000121 | FP003 | shirts-S | 3 | 3
| 3330000010 | 0000121 | FP003 | shirts-M | 3 | 3
| 3330000010 | 0000122 | FP003 | shirts-S | 2 | 3
我正在努力寻找如何最好地实现这一目标。我知道 count(distinct..),但我是否必须将当前查询放入子查询中,以便计数首先与该查询的结果相反?
【问题讨论】:
-
yes..获取每个 box_barcode 的计数并将其与表格连接。您可以使用
count窗口函数来完成它。但它不支持distinct。 -
我会使用公用表表达式来计算每个 box_barcode 的不同订单号的数量,然后将您的 CTE 加入您的查询并将该值显示为 SELECT 语句中的参数。如果您将整个查询与一堆连接到一个视图中,那么它看起来会更整洁一些。
标签: sql sql-server ssms ssms-2016