先求最大值,再用这个最大值去更新,access的SQL语句则么写,难住我了,高分,请进。

时间:2021-05-15 15:11:48
Table Name: DataDeal

nGroupNo  nSetNo  nUnit
 1          0      1
 1          0      2
 1          0      3
 2          1      6
 2          1      7
 2          1      8
 也就是先求nGroupNo和nSetNo都相等的时候,nUnit的最大值;
 再用这个nUnit最大值更新nUnit。
最大值:
nGroupNo  nSetNo  nUnit
 1          0      3
 2          1      8
结果:
nGroupNo  nSetNo  nUnit
 1          0      3
 1          0      3
 1          0      3
 2          1      8
 2          1      8
 2          1      8
由于有100万条的大数据,建立中间表(临时表)是不可取的。

一下子实现这两个功能的SQL语句怎么写(是在access下),
高分,再加真诚的感谢。



14 个解决方案

#1


试过一下,好像不行啊!
要一句实现,100万行的数据,还是转到MSSQL里做吧!

#2


能够利用变量中间存储一下的话,好象有可能,
不过我对这玩艺不是很熟悉,望高手指教。

#3


update DataDeal
set nUnit=b.nUnit
from 
(select nGroupNo,nSetNo,Max(nUnit)as nUnit from DataDetail Group By nGroupNo,nSetNo)a,DataDetail b
where a.nGroupNo=b.nGroup and a.nSetNo=b.nSetno

#4


用临时表

1,生成最大值的临时表
2.做临时表与源表的联接查询
3.在这个查询上做更新 update queryTemp set datadeal.nunit=temp.nunit

#5


Update DataDeal
Set nUnit=b.nUnit
from 
 ( Select nGroupNo,nSetNo,Max(nUnit) AS nUnit 
   From DataDeal 
   Group By nGroupNo,nSetNo
  )a,DataDetail b
Where a.nGroupNo=b.nGroup and a.nSetNo=b.nSetno

#6


何必?

如果你真是在Access环境中,你应该去看一下域合计函数

给你一个提示:

dmax 函数你可以用。自己去试试吧

#7


靠!怎么没想到!

#8


问题不是象
changechange(改了又改) 
说的那么简单。要是这样,我也知道很多方法。
由于有别的原因,要用SQL语句来完成。
所以我问的问题是:这个SQL能不能写,怎么写。
而不是怎么去实现这个功能。

所以,想得到的回答是,这个SQL能不能写,怎么写。
望各位指点。

#9


条件是不能象上面有两位那样建立中间表(也就是临时表),
可以利用中间变量。

#10


呵呵,限死条件了,我也无话可说了

我猜dmax等域函数的出现就是为了解决update等语句在jet sql中会出现“不可更新查询”提示的问题,既然你全部限定了那恐怕无法解决了

#11


感谢各位指点,能不能解决???

#12


没试我的么??

#13


难度很大呀!!!

#14


Thank you!!!

#1


试过一下,好像不行啊!
要一句实现,100万行的数据,还是转到MSSQL里做吧!

#2


能够利用变量中间存储一下的话,好象有可能,
不过我对这玩艺不是很熟悉,望高手指教。

#3


update DataDeal
set nUnit=b.nUnit
from 
(select nGroupNo,nSetNo,Max(nUnit)as nUnit from DataDetail Group By nGroupNo,nSetNo)a,DataDetail b
where a.nGroupNo=b.nGroup and a.nSetNo=b.nSetno

#4


用临时表

1,生成最大值的临时表
2.做临时表与源表的联接查询
3.在这个查询上做更新 update queryTemp set datadeal.nunit=temp.nunit

#5


Update DataDeal
Set nUnit=b.nUnit
from 
 ( Select nGroupNo,nSetNo,Max(nUnit) AS nUnit 
   From DataDeal 
   Group By nGroupNo,nSetNo
  )a,DataDetail b
Where a.nGroupNo=b.nGroup and a.nSetNo=b.nSetno

#6


何必?

如果你真是在Access环境中,你应该去看一下域合计函数

给你一个提示:

dmax 函数你可以用。自己去试试吧

#7


靠!怎么没想到!

#8


问题不是象
changechange(改了又改) 
说的那么简单。要是这样,我也知道很多方法。
由于有别的原因,要用SQL语句来完成。
所以我问的问题是:这个SQL能不能写,怎么写。
而不是怎么去实现这个功能。

所以,想得到的回答是,这个SQL能不能写,怎么写。
望各位指点。

#9


条件是不能象上面有两位那样建立中间表(也就是临时表),
可以利用中间变量。

#10


呵呵,限死条件了,我也无话可说了

我猜dmax等域函数的出现就是为了解决update等语句在jet sql中会出现“不可更新查询”提示的问题,既然你全部限定了那恐怕无法解决了

#11


感谢各位指点,能不能解决???

#12


没试我的么??

#13


难度很大呀!!!

#14


Thank you!!!