【发布时间】:2019-03-19 23:17:03
【问题描述】:
我使用包含每周机会记录及其各自状态的表格。我想比较一个机会的最新状态和它之前的一周(例如:状态从 Prospecting 更改为 Negotiation)。我想将本周与前一周相比值发生变化的所有值都插入到新表中。 注意: 在此周表中,0 是本周,1 是前一周,2 是前两周,等等。
表历史记录:
+--------+---------+-------------+-----+
|Acc_Num | Opp_Num | Stage | Week|
+--------+---------+-------------+-----+
| 1 | 1 | Won | 0 |
+--------+---------+-------------+-----+
| 1 | 1 | Negotiation | 1 |
+--------+---------+-------------+-----+
| 1 | 1 | Prospecting | 2 |
+--------+---------+-------------+-----+
| 1 | 2 | Prospecting | 0 |
+--------+---------+-------------+-----+
| 1 | 2 | Prospecting | 1 |
+--------+---------+-------------+-----+
| 2 | 1 | Negotiation | 0 |
+--------+---------+-------------+-----+
| 2 | 1 | Prospecting | 1 |
+--------+---------+-------------+-----+
目标表前:
+--------+---------+-------------+-----+
|Acc_Num | Opp_Num | Stage | Week|
+--------+---------+-------------+-----+
| 1 | 1 | Won | 0 |
+--------+---------+-------------+-----+
| 1 | 1 | Negotiation | 1 |
+--------+---------+-------------+-----+
| 2 | 1 | Negotiation | 0 |
+--------+---------+-------------+-----+
| 2 | 1 | Prospecting | 1 |
+--------+---------+-------------+-----+
我卡在比较前一周的阶段的第一步。这是我尝试过但不起作用的方法 SQL 代码:
SELECT *
INTO Goal_Table
FROM (
SELECT Acc_Num
,Opp_Num
,Stage
,Week
,CONCAT(Acc_Num, Opp_Num,Week) AS Unq_ID
FROM Table_History) as A
Left Join
(SELECT Acc_Num
,Opp_Num
,Stage
,Week
,CONCAT(Acc_Num, Opp_Num,Week) AS Unq_ID
FROM Table_History) as B
ON A.Unq_ID=B.Unq_ID AND A.Week=B.Week-1
我不断收到关于列名称需要唯一的错误。这是实际的错误文本:“每个表中的列名必须是唯一的。表 'Goal_Table' 中的列名 'Acc_Num' 被指定了多次。”
感谢您的帮助或指导
【问题讨论】:
-
您可能只想要
SELECT A.*而不是SELECT *。您还会遇到一个问题,即在您的JOIN条件下,在表A或B中没有选择名为R的列 -
SSMS 适用于 SQL Server,但您使用了 MySQL 标记。您可以将 mysql 更改为 sql-server 或从您的标题和标签中删除 ssms 吗?