对于令人困惑的标题感到抱歉,但我找不到更好的解释方法。
我有一些结果,如果找到特定的代码,一行应填充整行。
以下是数据:
PartID CustomerID Status Qty Notes
1000 900123 1 10 NULL
911 900123 1 5 NULL
这就是我想要它做的事情:
PartID CustomerID Status Qty Notes
1000 900123 1 10 911
911 900123 1 5 911
如果一个PartID的值为911,我怎么能写一个查询来给notes字段赋值911?
编辑:感谢大家的回复,但我希望我可以使用Select语句来实现这一目标。我通过使用临时表来完成此操作,如果客户的订单中有911,则更新,仅使用911更新客户的注释,然后查询临时表以获取数据。答案 0 :(得分:0)
试试这个:
UPDATE Table
SET Notes=(CASE WHEN (SELECT Count(1) FROM Table Where PartId=911)>0 THEN 911 ELSE NULL END)
或
UPDATE t
SET t.Notes= t2.PartId
FROM Table t
LEFT JOIN Table t2 on t2.PartId=911
答案 1 :(得分:0)
update #t
set Notes=(select PartID from #t where PartID in(911))
select * from #t
答案 2 :(得分:0)
您可以使用类似
的内容update MyTable
set Notes = '911'
where (select count(1) from @MyTableVar where PartID = 911) > 0
例如:
DECLARE @MyTableVar table( PartID int,
CustomerID int,
Status int,
Qty int,
Notes varchar(50));
insert into @MyTableVar(PartID, CustomerID, Status, Qty, Notes)
values (1000, 900123, 1, 10, null)
insert into @MyTableVar(PartID, CustomerID, Status, Qty, Notes)
values (911, 900123, 1, 5, null)
select * from @MyTableVar
update @MyTableVar
set Notes = '911'
where (select count(1) from @MyTableVar where PartID = 911) > 0
select * from @MyTableVar
编辑: 要更改返回的值,而不是更新数据库,您可以执行以下操作(基于上面的示例):
select
mtv.PartID,
mtv.CustomerID,
mtv.Status,
mtv.Qty,
case when (select count(1) from @MyTableVar where PartID = 911) > 0
then '911'
else mtv.Notes
end as Notes
from
@MyTableVar mtv
答案 3 :(得分:0)
select PartID, CustomerID, Status, Qty,
case when exists(select * from notes where PartID = 911) then '911' else Notes end Notes
from notes
答案 4 :(得分:0)
我建议你将逻辑分成两个单独的动作:
--1. check condition
declare @IsPartIDDetected int = 0;
if exists (select PartID from Notes where PartID = 911 )
set @IsPartIDDetected = 1;
--2. get filteredoutput
select PartID, CustomerID, Status, Qty,
case when @IsPartIDDetected = 1 then '911' else COALESCE(Notes,'') end as Notes
from Orders
此解决方案具有最佳执行计划,并且内存成本更低。 添加了COALESCE命令作为处理的NULL值的示例。
您也可以将其包装成单个CTE语句:
WITH partCondition as (
select top 1 PartID as conditon from Notes where PartID = 911
)
select PartID, CustomerID, Status, Qty,
case
when exists ( select * from partCondition )
then 911 --conditon met
else Notes end --condition NOT met
as Notes
from Orders;
这有助于降低执行成本。
答案 5 :(得分:0)
不清楚一个部分ID是什么意思 你的意思是CustomerID的partID是911吗?
运行这两个陈述:
update customer
set notes = 911
where partID = 911
and notes <> 911;
update c2
set c2.notes = 911
from customer c1
join customer c2
on c2.CustomerID = c1.CustomerID
and c1.partID = 911
and c2.partID <> 911
and (c2.notes <> 911 or c2.notes is null);
这一个声明可能会这样做,但不确定它会更快:
update c2
set c2.notes = 911
from customer c1
join customer c2
on c2.CustomerID = c1.CustomerID
and c1.partID = 911
and (c2.notes <> 911 or c2.notes is null);