Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 先加入或先加入_Sql_Inner Join_Distinct - Fatal编程技术网

Sql 先加入或先加入

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

我有一个用于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 |
| 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结束时将所有信息合并在一起。