【发布时间】:2017-08-31 19:53:26
【问题描述】:
我有一个 Customer 表和一个 Sales 表。我已将它们合并在一起,但它们的日期重叠。我需要获得销售额的累计总额,而重叠会影响我的累计值。如果客户日期 = 销售日期,则使用客户日期。如果 Customer Date >= Sales Date 则使用销售日期。
我用这段代码合并成一个合并表:
USE Sales
INSERT INTO MERGE(FirstName, LastName, CustomerNo, DATE, Sales)
SELECT A.SOURCE, A.FirstName, A.LastName, A.CustomerNo, A.DATE, A.sales
FROM dbo.Customers AS A
UNION
SELECT B.FirstName B.LastName, B.CustomerNo, B.DATE, B.Sales
FROM dbo.Sales AS B
;
它可以工作,但我似乎无法使代码的重叠部分工作。
示例...
+----------+-----------+----------+------------+-----------+-------+-----------------+
| SOURCE | FIRSTNAME | LASTNAME | CUSTOMERNO | DATE | SALES | CUMLATIVE_SALES |
+----------+-----------+----------+------------+-----------+-------+-----------------+
| CUSTOMER | Tom | White | 65123 | 3/1/2017 | 38.78 | |
| CUSTOMER | Tom | White | 65123 | 3/20/2017 | 128 | 166.78 |
| CUSTOMER | Tom | White | 65123 | 4/8/2017 | 256 | 422.78 |
| CUSTOMER | Tom | White | 65123 | 4/27/2017 | 105 | 527.78 |
| CUSTOMER | Tom | White | 65123 | 5/16/2017 | 78 | 605.78 |
| CUSTOMER | Tom | White | 65123 | 6/4/2017 | 15 | 620.78 |
| SALES | Tom | White | 65123 | 5/16/2017 | 78 | 698.78 |
| SALES | Tom | White | 65123 | 6/4/2017 | 15 | 713.78 |
| SALES | Tom | White | 65123 | 7/31/2017 | 125 | 838.78 |
| SALES | Tom | White | 65123 | 8/19/2017 | 110 | 948.78 |
| SALES | Tom | White | 65123 | 9/7/2017 | 90 | 1038.78 |
| SALES | Tom | White | 65123 | 9/26/2017 | 80 | 1118.78 |
+----------+-----------+----------+------------+-----------+-------+-----------------+
【问题讨论】:
-
您使用的是什么数据库?如果您使用的是 MS SQL,我将创建一个函数来执行逻辑并将两个日期作为参数传递
-
我正在使用 SQL Server 管理工作室
-
请显示一些示例数据和预期输出。您当前的查询只是 UNION 两个表,对我来说似乎没有合并
-
您的代码没有指明您想在哪里摆弄日期。旁白:
UNION,而不是UNION ALL,删除重复项。使用关键字,例如MERGE和DATE,对于不推荐的对象,case when CustomerDate > SalesDate then SalesDate when CustomerDate = SalesDate then CustomerDate else NULL end会做一些事情。正如你写的那样,如果它们相等,你想使用 both 值! -
凯蒂,您需要编辑您的问题并发布这些示例。您可能想用ozh.github.io/ascii-tables 或其他网站对其进行格式化......不幸的是,没有人能阅读该评论并理解它。
标签: sql-server tsql merge