Sql 从MS Access DB表中提取具有条件和分组的数据
我在MS Access中有下表:Sql 从MS Access DB表中提取具有条件和分组的数据,sql,ms-access,Sql,Ms Access,我在MS Access中有下表: FID FNAME SID FBOOL 14 A11111_1111111_1.png 5 false 15 A11111_1111111_15.png 5 true 16 A11111_1111111_16.png 5 false 17 A11111_1111111_17.png 5 false 18 A1123_2345_1.png 7 false 19 A1
FID FNAME SID FBOOL
14 A11111_1111111_1.png 5 false
15 A11111_1111111_15.png 5 true
16 A11111_1111111_16.png 5 false
17 A11111_1111111_17.png 5 false
18 A1123_2345_1.png 7 false
19 A1123_2345_19.png 7 false
20 A1123_2345_20.png 7 false
3 A111_111_1.bmp 8 true
10 A111_111_4.bmp 8 true
21 A111_111_13.png 8 false
31 A1123_2345_1.png 9 false
32 A1123_2345_19.png 9 false
33 A1123_2345_20.png 9 <=EMPTY Value
34 A1123_2345_1.png 10 <=EMPTY Value
35 A1123_2345_19.png 10 <=EMPTY Value
36 A1123_2345_20.png 10 <=EMPTY Value
44 A1123_2345_20.png 11 true
45 A1123_2345_1.png 11 false
46 A1123_2345_19.png 11 <=EMPTY Value
47 A1123_2345_20.png 11 true
SirFoto的标题为:
FID FNAME SID FBOOL //the SID is a foreign key, FID is primary key
我的查询如下所示:
SELECT SirData.SID, SirData.PNumber, SirData.SNumber, SirData.STitle, SirData.STime, SirData.SNote, FOTO.FID, FOTO.FNAME FROM SirData LEFT JOIN ( Select SID, FID, FNAME FROM SirFoto where FID IN ( Select MAX(FID) from SirFoto group by SID order by MAX(FBOOL) desc, MAX(FID) desc //I tried like this, but is incorrect !) ) FOTO ON SirData.SID = FOTO.SID where SirData.PNumber=\ selectedprc \ order by SirData.PNumber ASC, SirData.SNumber ASC
您似乎想要最新的一行,并偏好true。这表明:
select sf.*
from SirFoto as sf
where sf.fid = (select top (1) sf2.fid
from SirFoto as sf2
where sf2.sid = sf.sid and
order by iif(sf2.fbool, 'true', 1, 2),
sf2.id desc
);
我最终得到了以下代码: 从SirData左侧连接选择SirData.SID、SirData.PNumber、SirData.SNumber、SirData.STime、SirData.SNote、FOTO2.FID、FOTO2.FNAME、FOTO2.FBOOL选择FOTO.FID、FOTO.FNAME、FOTO.FBOOL,FOTO.SID FROM SirFoto as FOTO WHERE FOTO.FID IN SELECT top 1 sf2.FID FROM SirFoto as sf2 WHERE sf2.SID=FOTO.SID ORDER BY iifsff2.FBOOL='true',1,2,sf2.FID desc FOTO2 ON SirData.SirData.PNumber=\+selectedprc+\ORDER BY SirData.PNumber ASC,SirData.SNumber ASC
要与POST合并的其他表是什么?这两个表的表定义和您的条件/您希望实现的目标。你说你想要FID列表,但你正在分组SID你想做什么?
SELECT SirData.SID, SirData.PNumber, SirData.SNumber, SirData.STitle, SirData.STime, SirData.SNote, FOTO.FID, FOTO.FNAME FROM SirData LEFT JOIN ( Select SID, FID, FNAME FROM SirFoto where FID IN ( Select MAX(FID) from SirFoto group by SID order by MAX(FBOOL) desc, MAX(FID) desc //I tried like this, but is incorrect !) ) FOTO ON SirData.SID = FOTO.SID where SirData.PNumber=\ selectedprc \ order by SirData.PNumber ASC, SirData.SNumber ASC
select sf.*
from SirFoto as sf
where sf.fid = (select top (1) sf2.fid
from SirFoto as sf2
where sf2.sid = sf.sid and
order by iif(sf2.fbool, 'true', 1, 2),
sf2.id desc
);