编写SQL INSERT,从两个独立的相关行中检索其数据

时间:2018-08-17 05:43:30

标签: sql sql-server join

我正在编写一个SQL脚本,该脚本将使用来自同一AccountID下的两行中的数据来插入新记录。

我的表格如下所示:

AccountID | ActivityId | DisplayDetails | TransactionDate    | EnvironmentId
============================================================================
1              7         Display1        2015-02-02 00:00:00.000    1
1              8         DisplayThis1    2018-02-02 00:00:00.000    1
1              7         Display2        1999-02-02 00:00:00.000    2
1              8         DisplayThis2    2000-02-02 00:00:00.000    2

我的解决方法是找到每个7,8组合,并插入带有ActivityId 78的新行,该行从ActivityId 7获取DisplayDetails,从ActivityId 8获取TransactionDate。

我的查询如下:

SELECT * 
INTO #ActivityEight
FROM Account A
WHERE A.ActivityId = 8


INSERT INTO #Account (AccountId, ActivityId, DisplayDetails, TransactionDate)
SELECT VL.AccountId, 78, S.DisplayDetails, VL.TransactionDate
FROM #temp2 VL WITH(NOLOCK)
JOIN #ActivityEight S
    ON VL.AccountId = S.AccountId
WHERE VL.ActivityId = 7

但是,当我运行SELECT * FROM Account时,每7和8行我得到78行,而每7和8组合我应该只得到1 78行。

AccountID | ActivityId | DisplayDetails | TransactionDate     | EnvironmentId
=============================================================================
   1            7        Display1        2015-02-02 00:00:00.000    1
   1            8        DisplayThis1    2018-02-02 00:00:00.000    1
   1            7        Display2        1999-02-02 00:00:00.000    2
   1            8        DisplayThis2    2000-02-02 00:00:00.000    2
   1           78        DisplayThis1    2015-02-02 00:00:00.000    NULL
   1           78        DisplayThis2    2015-02-02 00:00:00.000    NULL
   1           78        DisplayThis1    1999-02-02 00:00:00.000    NULL
   1           78        DisplayThis2    1999-02-02 00:00:00.000    NULL

我相信我可以利用EnvironmentId实现所需的功能,但我不确定如何实现。

任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这会对您有所帮助

INSERT INTO #Account (AccountId, ActivityId, DisplayDetails, TransactionDate)
SELECT VL.AccountId, 78, S.DisplayDetails, VL.TransactionDate
FROM Account VL WITH(NOLOCK)
JOIN Account S ON VL.AccountId = S.AccountId and VL.EnvironmentId = S.EnvironmentId
WHERE VL.ActivityId = 7 and S.ActivityId = 8