Sql 在临时表的一列中插入一行值
以这个查询为例:Sql 在临时表的一列中插入一行值,sql,sql-server,Sql,Sql Server,以这个查询为例: INSERT INTO #QueryOutput SELECT DISTINCT UR2.LeftID, UR3.LeftID FROM UserRelations UR1 JOIN UserRelations UR2 ON UR1.RightID = UR2.LeftID JOIN UserRelations UR3 ON UR2.RightID = UR3.LeftID W
INSERT INTO #QueryOutput
SELECT DISTINCT
UR2.LeftID, UR3.LeftID
FROM
UserRelations UR1
JOIN
UserRelations UR2 ON UR1.RightID = UR2.LeftID
JOIN
UserRelations UR3 ON UR2.RightID = UR3.LeftID
WHERE
(UR1.RelationID = 1)
OR (UR1.RelationID = 1 AND UR2.RelationID = 1)
AND UR1.LeftID IN (SELECT UserID FROM #QueryInput)
这是神奇的一行:
INSERT INTO #QueryOutput SELECT DISTINCT UR2.LeftID ,UR3.LeftID
#queryyoutput
是一个包含一列UserID的表
我想插入UR2.LeftID
,UR3.LeftID
,或者在这一列中插入尽可能多的UR*.LeftID
。你打算怎么做
谢谢也许这正是你想要的:
INSERT INTO #QueryOutput
SELECT DISTINCT (case when n.n = 2 then UR2.LeftID
when n.n = 3 then UR3.LeftID
end)
FROM UserRelations UR1 JOIN
UserRelations UR2
ON UR1.RightID = UR2.LeftID JOIN
UserRelations UR3
ON UR2.RightID = UR3.LeftID CROSS JOIN
(select 2 as n union all select 3) n
WHERE (UR1.RelationID = 1 ) OR (UR1.RelationID = 1 AND UR2.RelationID = 1 ) AND
UR1.LeftID IN (SELECT UserID FROM #QueryInput);
你现在的做法是不可能的,除非你试着像下面这样做一个
UNION-ALL
INSERT INTO #QueryOutput
SELECT DISTINCT UR2.LeftID FROM UserRelations UR1
JOIN UserRelations UR2 ON UR1.RightID = UR2.LeftID
JOIN UserRelations UR3 ON UR2.RightID = UR3.LeftID WHERE (UR1.RelationID = 1 )
OR (UR1.RelationID = 1 AND UR2.RelationID = 1 )
AND UR1.LeftID IN (SELECT UserID FROM #QueryInput)
UNION ALL
SELECT DISTINCT UR3.LeftID FROM UserRelations UR1
JOIN UserRelations UR2 ON UR1.RightID = UR2.LeftID
JOIN UserRelations UR3 ON UR2.RightID = UR3.LeftID WHERE (UR1.RelationID = 1 )
OR (UR1.RelationID = 1 AND UR2.RelationID = 1 )
AND UR1.LeftID IN (SELECT UserID FROM #QueryInput)
如果您使用的是SQL Server 2008或更高版本,我认为最好的方法是使用
如何将两个值放入一列中?您是否正在寻找一种方法来“透视”值,从而使多个列变为多行?是的,是一种将值透视到单个列的方法。我只是不太擅长SQL,而且我也不完全理解数据透视:(如前所述,您的整个WHERE条件与其第一个谓词匹配,即您可以将其重写为
WHERE UR1.RelationID=1
,结果相同。这是因为X∨ X∧ 无论什么≡ X
。查询逻辑(或您在此发布的版本)中可能缺少某些内容.我不理解.n.代码,抱歉。它是如何工作的?如果可能的话,我只想更改查询的第一行。起始部分和位置部分应该保持原样…而且,可能不止两个值。我可以有UR1.LeftID,UR2.LeftID,…UR*.LeftID。我不知道这将如何增加..因为我必须自动生成qu代码:(这是一个unpivot来分别获取每个值。我认为你不能仅仅通过更改select
子句来实现这一点。这会产生与我建议的表完全相同的结果吗?我能为任意X个表使用我想要的任意多个Union all吗?谢谢。它应该…基本上你是在拉所有的表。)将不同的LeftID
放入临时表的单个列中,是的,您可以使用任意多个union all。
INSERT INTO #QueryOutput
SELECT DISTINCT upvt.LeftID
FROM UserRelations UR1
JOIN UserRelations UR2
ON UR1.RightID = UR2.LeftID
JOIN UserRelations UR3
ON UR2.RightID = UR3.LeftID
CROSS APPLY (VALUES (UR2.LeftID), (UR3.LeftID )) AS upvt (LeftID)
WHERE (UR1.RelationID = 1 )
OR (UR1.RelationID = 1 AND UR2.RelationID = 1 )
AND UR1.LeftID IN (SELECT UserID FROM #QueryInput)