下面,我有2个表,每个表有3列,每个表都基于QuestionId
和它们所附加的表单具有过去和现在的值。
presentValueTable
-它具有questionId
和现值。
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
] 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
谢谢您的光临。
答案 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