Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server在单行中使用大小写更新多列_Sql - Fatal编程技术网

SQL Server在单行中使用大小写更新多列

SQL Server在单行中使用大小写更新多列,sql,Sql,我需要一个问题的帮助。我使用SQLServer2008 我有三张表(它们更简单,仅举个例子): 表中的简单数据: insert into Goods values (1), (2), (3); insert into Comissions values (1, 15, 1, 2), (2, 10, 2, 2), (3, 5, 1, 3); insert into PriceComponents values (1, 100, 1, 0, 2, 0, 2), (2, 200, 1, 0, 2,

我需要一个问题的帮助。我使用SQLServer2008

我有三张表(它们更简单,仅举个例子):

表中的简单数据:

insert into Goods values (1), (2), (3);

insert into Comissions values (1, 15, 1, 2), (2, 10, 2, 2), (3, 5, 1, 3);

insert into PriceComponents values (1, 100, 1, 0, 2, 0, 2), (2, 200, 1, 0, 2, 0, 3);
我想用该查询更新
PriceComponents
(列:
commission1
commission2
):

update dbo.PriceComponents
set comission1 = case when Comissions.svkey=svkey1 then dbo.Comissions.commission else comission1 end,
    comission2 = case when Comissions.svkey=svkey2 then dbo.Comissions.commission else comission2 end
from dbo.PriceComponents 
left outer join dbo.Goods on dbo.PriceComponents.to_key = dbo.Goods.to_key 
left outer join dbo.Comissions on dbo.Goods.to_key = dbo.Comissions.to_key;
因此,在该查询之前,
PriceComponents
看起来像:

id  summ    svkey1  comission1  svkey2  comission2  to_key
1   100,00  1       0           2       0           2
2   200,00  1       0           2       0           3
及之后:

id  summ    svkey1  comission1  svkey2  comission2  to_key
1   100,00  1       15          2       0           2
2   200,00  1       5           2       0           3
但我预计会有这样的结果:

id  summ    svkey1  comission1  svkey2  comission2  to_key
1   100,00  1       15          2       10          2
2   200,00  1       5           2       0           3

我真的不明白我在哪里出错。

你是
加入
上,但试图从
委员会中的两个不同行中提取,其中只有一行匹配


to_键
值将仅与
委员会
行中的一行匹配,这是第一个更新
委员会1
的行
Commission2
将永远不会匹配,因为同一数据行上的
to_键
svkey
值不正确。

谢谢您的回答。但如果我使用相同的条件执行select查询:select*from dbo.PriceComponents left outer join dbo.Goods on dbo.PriceComponents.to_key=dbo.Goods.to_key left outer join dbo.commissions on dbo.Goods.to_key=dbo.commissions.to_key;我要三排。也许我错了,但我希望更新将使用这一行,对于PriceComponents中的一行,我将有两个更新。如果是这样的话。如何完成任务-更新PriceComponents中所有行中的所有佣金?您只有一行符合要求。为了满足要求,您可能需要对数据进行两次传递
id  summ    svkey1  comission1  svkey2  comission2  to_key
1   100,00  1       15          2       10          2
2   200,00  1       5           2       0           3