开发者

How do I copy multiple values from within the same table to other values in that same table in SQL?

First of all I'm rather new to SQL and so even though I believe a similar question was asked in this thread ( SQL Query - Copy Values in Same Table ) I literally can't understand it well enough to utilize the information. For that I apologize.

Now, I have a table that looks something like this:

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

Except that my table obviously has quite a lot of rows. I already went through filling in all the parameter titles where the company id was 'P' and would like to avoid开发者_如何学JAVA manually doing the same for those with company id 'W'. My question is what SQL statement (this is in Microsoft SQL Server 2008) can I use to copy the values in the column "parameter title" where the company id is 'P' to the values in the same column where the company id is 'W' and both parameter names match up (W has less parameters than P)?

Using the previously linked thread I was able to come up with the following, but it spits out an error and I know it's not done correctly:

 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'

(I'm playing around with a copy of the table instead of the actual table)

The error I get is "Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated."

Thank you for your help and advice, -Asaf


You need to ensure that your subquery is only returning one result. Right now that error message is telling you that you're getting more than one record returned.

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'

Try giving the above SQL a whirl. This could still give you more than one result, but without knowing what your table looks like and what the data constraints are it's hard to give you something guaranteed to work.


Try adding the DISTINCT keyword to your query:

 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'
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜