我需要在SQL Server 2008数据库中实现某些功能。
我的问题是:我需要做的就是在一个表中发生,我必须使用我在同一列中但在其他条件下的值更新列。
我必须执行类似覆盖价格的操作,其中columnx
和columny
具有某些特定值,其中columnx
和columny
的价格具有其他一些值,让我来描述一下这在图像中,一切都会更好地解释:
正如您在图片人身上看到的,我需要更新doc_code 0和doc_number 1的价格,以及doc_code为0且doc_number为2的情况下的价格值。
我试过这个,但那不起作用:
UPDATE Products
SET Products.price = temp.price,
Products.pricetwo = temp.pricetwo
FROM
Products,
(SELECT price, pricetwo
FROM Products
WHERE Products.doc_code = 0 AND Products.doc_number = 2) temp
WHERE
Products.doc_code = 0 AND Products.doc_number = 1
我认为上面的代码会这样做,好吧,给我价格,其中doc代码为0,doc编号为2,并将它们设置为doc code 0和doc number 1,但不幸的是,这对我没有帮助.. < / p>
我需要使用doc_code = 0和doc_number = 1更新所有价格,这意味着用doc_code = 0和doc_number = 2
的价格替换doc_code = 0和doc_number = 1的价格谢谢你们 干杯
答案 0 :(得分:0)
如果我正在读这个,那么:
update p1
set p1.price = p2.price
, p1.pricetwo = p2.pricetwo
from Products p1
inner join Products p2
on p1.doc_code = p2.doc_code
and p1.doc_number = 1 /* this could also be in the where instead */
and p2.doc_number = 2 /* this could also be in the where instead */
where p1.doc_code = 0;
但如果您有{1}}
的行超过1行,则无法预测答案 1 :(得分:0)
根据您的图片:
如果我在解密时出错,以下内容将无济于事。而且,我没有写出更新声明,我希望你看看它是如何工作的。
CREATE TABLE #products(
[ID] [int] NULL,
[doc_code] [int] NULL,
[doc_number] [int] NULL,
[price] [money] NULL,
[price_two] [money] NULL
) ON [PRIMARY];
GO
INSERT INTO #products
([ID]
,[doc_code]
,[doc_number]
,[price]
,[price_two])
VALUES
(1,0,2,1,1)
,(2,0,1,5.6,4.6)
,(3,0,1,7,3)
,(4,1,1,2,2)
,(5,1,2,2,2)
,(6,1,2,3,3)
,(7,2,3,4,2)
,(8,2,0,10,5)
,(9,0,0,3,3)
,(10,1,0,5,2);
GO
--Select * FROM #products
SELECT [ID]
,[doc_code]
,[doc_number]
,[price]
,[price_two]
,CAST([doc_code] as varchar)+''+CAST([doc_number] as varchar) conc
,(Select top 1 price_two FROM #products WHERE [doc_code]+''+[doc_number]= '02') new_price
FROM #products
WHERE CAST([doc_code] as varchar)+''+CAST([doc_number] as varchar)= '01'
DROP Table #products