Sql 从MS Access DB表中提取具有条件和分组的数据

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

我在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  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
               );