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里做吧!
要一句实现,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
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
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
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 函数你可以用。自己去试试吧
如果你真是在Access环境中,你应该去看一下域合计函数
给你一个提示:
dmax 函数你可以用。自己去试试吧
#7
靠!怎么没想到!
#8
问题不是象
changechange(改了又改)
说的那么简单。要是这样,我也知道很多方法。
由于有别的原因,要用SQL语句来完成。
所以我问的问题是:这个SQL能不能写,怎么写。
而不是怎么去实现这个功能。
所以,想得到的回答是,这个SQL能不能写,怎么写。
望各位指点。
changechange(改了又改)
说的那么简单。要是这样,我也知道很多方法。
由于有别的原因,要用SQL语句来完成。
所以我问的问题是:这个SQL能不能写,怎么写。
而不是怎么去实现这个功能。
所以,想得到的回答是,这个SQL能不能写,怎么写。
望各位指点。
#9
条件是不能象上面有两位那样建立中间表(也就是临时表),
可以利用中间变量。
可以利用中间变量。
#10
呵呵,限死条件了,我也无话可说了
我猜dmax等域函数的出现就是为了解决update等语句在jet sql中会出现“不可更新查询”提示的问题,既然你全部限定了那恐怕无法解决了
我猜dmax等域函数的出现就是为了解决update等语句在jet sql中会出现“不可更新查询”提示的问题,既然你全部限定了那恐怕无法解决了
#11
感谢各位指点,能不能解决???
#12
没试我的么??
#13
难度很大呀!!!
#14
Thank you!!!
#1
试过一下,好像不行啊!
要一句实现,100万行的数据,还是转到MSSQL里做吧!
要一句实现,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
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
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
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 函数你可以用。自己去试试吧
如果你真是在Access环境中,你应该去看一下域合计函数
给你一个提示:
dmax 函数你可以用。自己去试试吧
#7
靠!怎么没想到!
#8
问题不是象
changechange(改了又改)
说的那么简单。要是这样,我也知道很多方法。
由于有别的原因,要用SQL语句来完成。
所以我问的问题是:这个SQL能不能写,怎么写。
而不是怎么去实现这个功能。
所以,想得到的回答是,这个SQL能不能写,怎么写。
望各位指点。
changechange(改了又改)
说的那么简单。要是这样,我也知道很多方法。
由于有别的原因,要用SQL语句来完成。
所以我问的问题是:这个SQL能不能写,怎么写。
而不是怎么去实现这个功能。
所以,想得到的回答是,这个SQL能不能写,怎么写。
望各位指点。
#9
条件是不能象上面有两位那样建立中间表(也就是临时表),
可以利用中间变量。
可以利用中间变量。
#10
呵呵,限死条件了,我也无话可说了
我猜dmax等域函数的出现就是为了解决update等语句在jet sql中会出现“不可更新查询”提示的问题,既然你全部限定了那恐怕无法解决了
我猜dmax等域函数的出现就是为了解决update等语句在jet sql中会出现“不可更新查询”提示的问题,既然你全部限定了那恐怕无法解决了
#11
感谢各位指点,能不能解决???
#12
没试我的么??
#13
难度很大呀!!!
#14
Thank you!!!