Sql 先加入或先加入
我有一个用于SalesItems和Sales的表结构 SalesItems是这样设置的Sql 先加入或先加入,sql,inner-join,distinct,Sql,Inner Join,Distinct,我有一个用于SalesItems和Sales的表结构 SalesItems是这样设置的 | SaleItemID | SaleID | ProductID | ProductType | | 1 | 1 | 1 | 1 | | 2 | 1 | 2 | 2 | | 3 | 1 | 15 | 1 | | 4
| 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 |
| 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 |
销售是这样设置的
| 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 |
| 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 |
我正在尝试导出一个基本的“每日历史”,它使用连接来输出这样的信息
| 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 |
因此,如果我做了一个总数(现金),那么我最终将返回70.00美元,而不是正确的39.50美元。我在连接方面不是最好的,所以我一直在研究外部连接之类的,但是这些似乎都不起作用,因为它们仍然匹配。有没有办法只在第一个实例上匹配,而在其余实例上返回NULL?比如像这样的
| 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 |
| 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 |
或者您对每天返还正确金额的现金还有其他建议吗?在您的
选择中使用DISTINCT(SaleID)
为每个销售ID返回一行。如果我为每个销售ID返回一行,那么我将错过某些销售项目-例如,我会错过销售项目2、3和6,这会使Type1Sales、Type2Sales等的销售总额相形见绌。哦,对不起,我错过了。如果你被这个模式所困扰,我会考虑两个单独的查询——一个是每次销售的汇总现金,另一个是所有非现金细节。我认为您应该能够通过原始查询获得详细信息,并使用DISTINCT(SaleID)
获得现金摘要。是的,我可能会按日期获得现金详细信息,然后在saleDate结束时将所有信息合并在一起。