唯一地添加表列值

时间:2020-04-26 22:35:06

标签: sql sql-server tsql

下面,我有2个表,每个表有3列,每个表都基于QuestionId和它们所附加的表单具有过去和现在的值。

  1. presentValueTable-它具有questionId和现值。

  2. pastValueTable-它具有questionId和同一QuestionId的过去值。

代码:

-- this code is re-runable 
IF OBJECT_ID('tempdb..#presentValueTable') IS NOT NULL 
BEGIN 
    DROP TABLE #presentValueTable
END

IF OBJECT_ID('tempdb..#pastValueTable') IS NOT NULL 
BEGIN 
    DROP TABLE #pastValueTable
END

CREATE TABLE #presentValueTable 
(
    Id Int IDENTITY(1, 1),
    QuestionId INT,
    AssignForm INT,
    Value INT
)

CREATE TABLE #pastValueTable
(
    Id Int IDENTITY(1,1),
    QuestionId INT,
    AssignForm INT, 
    Value INT 
)

-- please run this once to insert the date 
/*
INSERT INTO #presentValueTable (QuestionId, AssignForm, Value)
VALUES (12, 35, 100), (12, 35, 200), (12, 35, 300), (12, 35, 400), (12, 35, 500)   --5 rows inserted

INSERT INTO #pastValueTable (QuestionId, AssignForm, Value)
VALUES (12, 45, 99), (12, 45, 199), (12, 45, 299), (12, 45, 399), (12, 45, 499)   --5 rows inserted
*/

SELECT * FROM #presentValueTable
SELECT * FROM #pastValueTable

![Image of the Select query for both the tables] 1

这是我期望的输出-3列10行。每个表有5行,所以当我选择时我要10行。

 QuestionId | AssignForm |  Value | 
 -----------+------------+--------+
 12              35        100 
 12              35        200 
 12              35        300 
 12              35        400 
 12              35        500 
 12              45        99 
 12              45        199 
 12              45        299 
 12              45        399 
 12              45        499 

谢谢您的光临。

2 个答案:

答案 0 :(得分:0)

这就是我所做的,如果我找到更好的答案,我将很乐意取消标记我的答案。 我每次都传递QuestionId并查询2表并将其添加到新的Temp Table中。 我觉得我需要遍历它以便更加动态。

 CREATE Procedure GetAllPastPresentValueByQuestionId @QuestionId INT
    AS
    BEGIN
    SET NOCOUNT ON; 
    CREATE Table #tableAll 
    (
    Id INT PRIMARY KEY Identity(1,1),
    QuestionId INT, 
    AssignForm INT ,
    Value INT, 
    )
    INSERT INTO  #tableAll (QuestionId, AssignForm,Value)
    SELECT p.QuestionId,p.AssingForm,p.Value   FROM #pastValueTable as p WHERE QuestionId = @QuestionId
    INSERT INTO #tableAll (QuestionId, AssignForm,Value)
    SELECT p.QuestionId,p.AssingForm,p.Value   FROM #presentValueTable as p WHERE QuestionId = @QuestionId


    SELECT * FROM #tableAll
    END 
    GO

答案 1 :(得分:0)

select pr.QuestionId,pr.AssingForm,pr.Value
from  #presentValueTable  as pr
union 
select pa.QuestionId,pa.AssingForm,pa.Value
from  #pastValueTable  as pa
order by QuestionId,AssingForm
相关问题