SQL SERVER 语句,真的有点难。谢谢大家了。(38)

  • 主题发起人 主题发起人 walimg
  • 开始时间 开始时间
W

walimg

Unregistered / Unconfirmed
GUEST, unregistred user!
【进货报表】,字段如下说明。【编号】 是自动加一的类型。【商品编码】每种商品有一个对应的商品编码。【设为参考价】是逻辑型。有如下数据。编号 商品名称 商品编码 数量 进价 设为参考价1 可乐 001 120 1.2 0 (0是False)2 大米 002 300 20 03 可乐 001 120 1.3 1 //要设成1 4 大米 002 300 22 1 //要设成1 5 可乐 001 120 1.2 0 6 面包 003 300 1.3 1 //进价和可乐的一样//要设成17 面包 003 300 1.3 0 //面包中有相同的进价,只要一条是1就行了//------因为同一种商品不同时间,进价不一样。现在要设最大进价的那条记录的字段【设为参考价】为1(就是True)。 update 进货报表 set 设价=1 如果条件是下面这样, where 参考单价 in (Select Max(参考单价) from 进货报表)可是,有的进价是一样的,如何得到商品编码一样的最高进价的 记录的【编号】。然后条件更新,只有【编号】是唯一的。--------------------高手帮我看看下面这条语句。============update 进货报表 set 设价=1 from (Select Max(参考单价) as 参考单价,商品编码 From 进货报表 group by 商品编码 ) as uu where 进货报表.商品编码=uu.商品编码 and 进货报表.参考单价=uu.参考单价//这句语句执行后,商品编码一样的最高进价也是一样的,全是1了。//只要一条记录是1就行了。
 
改为以下语句试试:Update 进货报表 Set 设价 = 1 From (Select 编号 From 进货报表 Where 参考单价 in (Select Max(参考单价) as 参考单价, 商品编码 From 进货报表 Group By 商品编码 ) as uu and 商品编码 = uu.商品编码) as t1 Where 编号 = t1.编号
 
错误是处在 select 编号, 商品编码 ,参考单价 from 进货报表 where 参考单价 in (Select Max(参考单价) as 参考单价 From 进货报表 group by 商品编码 ) as uu and 商品编码=uu.商品编码有多个值吗?如果是 mssql + top 1 oracle + rownum 试下。
 
补充一句,将这个条件放置到where之后
 
update 进货报表 set 设价=1 where 参考单价 in (select max(参考单价) from 进货报表 group by 商品编码)
 
谢谢你,szhcracker。 试过了,但不行,哪位高手再指点一下。谢谢了。--------//这个也不行。update 进货报表 set 设价=1 from (select 编号, 商品编码 ,参考单价 from 进货报表 where 参考单价 in (Select Max(参考单价) as 参考单价 From 进货报表 group by 商品编码 ) ) as t1 where 进货报表.编号=t1.编号//==================原因是有些商品的进价是一样的,现在想要一种商品编码的最高进价的那条记录的【编号】。谢谢了。
 
update 进货报表 set 设价=1 where 编号 in (select min(编号) 编号 from 进货报表 where 参考单价 in (Select Max(参考单价) as 参考单价 From 进货报表 group by 商品编码 ) as uu and 商品编码=uu.商品编码 group by 商品编码 )
 
用select top 1 ...... order by 进价,获取ID值,并作更新即可,比较简单的语句,top速度快,不要用max,如果几百万条以上数据用max速度很卡
 
id f1 f2 f3 bs 1 jack 001 1.5 02 jack 001 1.8 13 jack 001 1.1 04 Mary 002 15 15 Mary 002 1.1 06 Mike 003 5.2 17 Mike 003 1.3 08 Mike 003 1.4 09 Mike 003 1.1 0update test set bs = 0 where id not in (select id=max(id) from (select a.* from test a inner join (select f2,f3=max(f3) from test a group by f2) t on (a.f2=t.f2 and a.f3=t.f3) ) t1 group by f2)update test set bs = 1 where id in (select id=max(id) from (select a.* from test a inner join (select f2,f3=max(f3) from test a group by f2) t on (a.f2=t.f2 and a.f3=t.f3) ) t1 group by f2)
 
谢谢各位大哥大。wufei2118,特别感谢,真的是高手。谢谢。
 
后退
顶部