如何将同一个表中的多个值复制到SQL中同一个表中的其他值?

时间:2011-08-25 17:39:05

标签: sql-server-2008 copy-paste

首先,我对SQL很陌生,所以即使我相信在这个帖子中提出了类似的问题(SQL Query - Copy Values in Same Table),我也完全不能理解它来利用这些信息。为此,我道歉。

现在,我有一个看起来像这样的表:

company id | parameter name | parameter title
     P     | Parameter One  | First Parameter
     P     | Parameter Two  | Second Parameter
     P     | Parameter Three| Third Parameter
     W     | Parameter One  | NULL
     W     | Parameter Two  | NULL

除了我的桌子显然有很多行。我已经完成了公司ID为“P”的所有参数标题的填写,并且希望避免为公司ID为“W”的人手动执行相同的操作。我的问题是我可以使用什么SQL语句(这是在Microsoft SQL Server 2008中)将公司ID为“P”的列“参数标题”中的值复制到公司ID为'的同一列中的值W'和两个参数名称都匹配(W的参数少于P)?

使用以前链接的线程,我能够提出以下内容,但它会发出错误,我知道它没有正确完成:

 UPDATE COMP_PARAMETER_COPY
 SET PARAM_TITLE=(SELECT PARAM_TITLE FROM COMP_PARAMETER_COPY P
             WHERE P.COMP_ID = 'P' AND P.PARAM_TITLE=PARAM_TITLE)
 WHERE COMP_ID='W'

(我正在玩桌子的副本而不是实际的桌子)

我得到的错误是“Msg 512,Level 16,State 1,Line 1 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 声明已经终止。“

感谢您的帮助和建议, -Asaf

2 个答案:

答案 0 :(得分:1)

您需要确保子查询仅返回一个结果。现在,错误消息告诉您正在返回多条记录。

UPDATE W
SET PARAM_TITLE =   (
                        SELECT PARAM_TITLE FROM COMP_PARAMETER_COPY P 
                        WHERE P.COMP_ID = 'P' AND P.PARAM_NAME = W.PARAM_NAME
                    )
FROM COMP_PARAMETER_COPY W
WHERE W.COMP_ID = 'W'

尝试给上面的SQL一个旋转。这仍然可以给你不止一个结果,但不知道你的表是什么样的,以及数据限制是什么,很难给你保证工作。

答案 1 :(得分:0)

尝试在查询中添加DISTINCT关键字:

 UPDATE COMP_PARAMETER_COPY
 SET PARAM_TITLE=(SELECT DISTINCT PARAM_TITLE FROM COMP_PARAMETER_COPY P
             WHERE P.COMP_ID = 'P' AND P.PARAM_TITLE=PARAM_TITLE)
 WHERE COMP_ID='W'