加入Distinct或First

时间:2015-04-27 17:50:21

标签: sql inner-join distinct

我有SalesItems和Sales的表结构。

SalesItems设置类似这样

| SaleItemID | SaleID | ProductID | ProductType |
| 1          | 1      |    1      |     1       |
| 2          | 1      |    2      |     2       |
| 3          | 1      |    15     |     1       |
| 4          | 2      |    5      |     2       |
| 5          | 3      |    1      |     1       |
| 6          | 3      |    8      |     5       |

销售设置就像这样

| Sale | Cash  |
| 1    | 1.00  |
| 2    | 10.00 |
| 3    | 28.50 |

我正在尝试导出基本的每日历史记录'它使用连接来吐出这样的信息。

| Date | StoreID | Type1Sales | Type2Sales | ... | Cash Taken |
| 5/2  | 50      | 50         | 40         | ... | 39.50      |
| 5/3  | 50      | 10         | 32.50      | ... | 48.50      |

我遇到的问题是,如果我从销售项目到销售项目进行内部联接,我将以此结束。

| SaleItemID | SaleID | ProductID | ProductType | Sale | Cash  |
| 1          | 1      |    1      |     1       | 1    | 1.00  |
| 2          | 1      |    2      |     2       | 1    | 1.00  |
| 3          | 1      |    15     |     1       | 1    | 1.00  |
| 4          | 2      |    5      |     2       | 2    | 10.00 |
| 5          | 3      |    1      |     1       | 3    | 28.50 |
| 6          | 3      |    8      |     5       | 3    | 28.50 |

所以,如果我做一个SUM(现金),那么我最终将返回70.00美元,而不是正确的39.50美元。我不是最好的加入,所以我一直在研究外连接等,但这些似乎没有工作,因为它仍然匹配。有没有办法只匹配FIRST实例,并为其余实例返回NULL?例如,像这样的东西

| SaleItemID | SaleID | ProductID | ProductType | Sale | Cash  |
| 1          | 1      |    1      |     1       | 1    | 1.00  |
| 2          | 1      |    2      |     2       | 1    | NULL  |
| 3          | 1      |    15     |     1       | 1    | NULL  |
| 4          | 2      |    5      |     2       | 2    | 10.00 |
| 5          | 3      |    1      |     1       | 3    | 28.50 |
| 6          | 3      |    8      |     5       | 3    | NULL  |

或者您是否有任何其他建议可以在每个特定日期返还正确数量的现金?

1 个答案:

答案 0 :(得分:0)

使用DISTINCT(SaleID)中的SELECT为每个促销ID返回一行。