2017-04-26 408 views
0

這是SQL Server查詢,需要轉換到MS Access 2003:轉換SQL Server查詢到MS Access 2003

select distinct u.ssn,u.[name],d.deptname,convert(varchar(12),c.checktime,103)Date, 
case when convert(varchar(8),min(checktime),8) between(select convert(varchar(8),checkintime1,8)startin 
    from schclass_bak where schname like'Morning')and(select convert(varchar(8),checkintime2,8)endin 
    from schclass_bak where schname like'Morning') 
    then convert(varchar(8),min(checktime),8) else '0' end MOIN, 
isnull((select max(convert(varchar(8),(checktime),8)) 
from checkinOut g 
where (convert(varchar(8),(checktime),8)) between (select convert(varchar(8),checkouttime1,8)startOut 
from schclass_bak where schname like'Morning') and (select convert(varchar(8),checkouttime2,8)endout 
from schclass_bak where schname like'Morning') and g.USERID=u.userid and convert(varchar(12),g.checktime,103)=convert(varchar(12),c.checktime,103)),'12:00')Mout, 

case when convert(varchar(8),max(checktime),8) between(select convert(varchar(8),checkintime1,8)startin 
    from schclass_bak where schname like'Afternoon')and(select convert(varchar(8),checkintime2,8)endin 
    from schclass_bak where schname like'Afternoon') 
    then convert(varchar(8),max(checktime),8) else '0' end AIN, 
case when convert(varchar(8),max(checktime),8) between(select convert(varchar(8),checkouttime1,8)startOut 
    from schclass_bak where schname like'Afternoon')and(select convert(varchar(8),checkouttime2,8)endout 
    from schclass_bak where schname like'Afternoon') 
then convert(varchar(8),max(checktime),8) else '17:30' end AOUT 

from checkinOut c inner join userinfo u on c.userid=u.userid 
inner join departments d on u.defaultdeptid=d.deptid 
where cast(convert(varchar(12),c.checktime)as smalldatetime)between '20170401' and '20170425' and u.ssn='50' 
    group by convert(varchar(12),c.checktime,103) ,u.ssn,u.[name],d.deptname,u.USERID 

我感謝所有幫助。謝謝

+3

您是否嘗試過自己轉換呢?你遇到了什麼問題? –

+0

是的,我嘗試過,但我得到了太多的錯誤,MS訪問不支持的情況下,運營商之間 –

+4

這個查詢使我想要拿出我的眼球,並彈出它們。閱讀起來很糟糕,而且一遍又一遍地發出相同的查詢。這需要以一種有意義的方式重寫。你在這裏也有一些邏輯問題。比如將datetime轉換爲字符串,然後進行範圍比較。 –

回答

1

我改變了你的一些格式,但主要是,我想我說得對。

SELECT DISTINCT u.ssn,u.[name],d.deptname,Format(c.checktime,"dd/mm/yyyy") as [Date], 
iif(Format(min(checktime),"h:nn:ss") between (select Format(checkintime1,"h:nn:ss") as startin 
    from schclass_bak where schname like 'Morning')and(select Format(checkintime2,"h:nn:ss") as endin 
    from schclass_bak where schname like 'Morning') 
    , Format(min(checktime),"h:nn:ss") 
    , '0') MOIN, 
isnull((select max(Format(checktime,"h:nn:ss")) 
    from checkinOut g where (Format(checktime,"h:nn:ss") between (select Format(checkouttime1,"h:nn:ss") as startOut 
    from schclass_bak where schname like 'Morning') and (select Format(checkouttime2,"h:nn:ss") as endout 
    from schclass_bak where schname like 'Morning') and g.USERID=u.userid and Format(g.checktime,"dd/mm/yyyy")=Format(c.checktime,"dd/mm/yyyy")),'12:00')Mout, 
iif(Format(max(checktime),"h:nn:ss") between(select Format(checkintime1,"h:nn:ss") as startin 
    from schclass_bak where schname like 'Afternoon') and (select Format(checkintime2,"h:nn:ss") as endin 
    from schclass_bak where schname like 'Afternoon') 
    , Format(max(checktime),"h:nn:ss") 
    , '0') AIN, 
iif(Format(max(checktime),"h:nn:ss") between(select Format(checkouttime1,"h:nn:ss") as startOut 
    from schclass_bak where schname like 'Afternoon')and(select Format(checkouttime2,"h:nn:ss") as endout 
    from schclass_bak where schname like 'Afternoon') 
    , Format(max(checktime),"h:nn:ss") 
    , '17:30') AOUT 

FROM checkinOut c inner join userinfo u on c.userid=u.userid 
INNER JOIN departments d on u.defaultdeptid=d.deptid 
WHERE Format(c.checktime, "yyyymmdd") between '20170401' and '20170425' and u.ssn='50' 
GROUP BY Format(c.checktime,"dd/mm/yyyy"), u.ssn, u.[name], d.deptname, u.USERID 

順便說一句,這裏有幾個SQL服務器到MS Access轉換提示:

  • CASE WHEN然後結束 - > IIF(條件,真部分,假部分)
  • 場混疊要求關鍵字「As」。例如:選擇最多(美元)作爲maxdollars
  • 要將日期轉換爲varchar(帶格式)格式(場, 「面具」)
+0

謝謝tgolisch先生,它工作完美 –

+1

您能否將此標記爲「已回答」 – tgolisch

-1
SELECT DISTINCT u.ssn, u.name, Format(c.checktime,"dd/mm/yyyy") AS [Date], IIf(Format(Min(checktime),"h:nn:ss") Between (select Format(checkintime1,"h:nn:ss") as startin  from schclass where schname like 'Morning') And (select Format(checkintime2,"h:nn:ss") as endin  from schclass where schname like 'Morning'),Format(Min(checktime),"h:nn:ss"),'0') AS MOIN, IIf((select max(Format(checktime,"h:nn:ss"))  from checkinOut g where Format(checktime,"h:nn:ss") between (select Format(checkouttime1,"h:nn:ss") as startOut  from schclass where schname like 'Morning') and (select Format(checkouttime2,"h:nn:ss") as endout  from schclass where schname like 'Morning') and g.USERID=u.userid and Format(g.checktime,"dd/mm/yyyy")=Format(c.checktime,"dd/mm/yyyy")),(select max(Format(checktime,"h:nn:ss"))  from checkinOut g where Format(checktime,"h:nn:ss") between (select Format(checkouttime1,"h:nn:ss") as startOut  from schclass where schname like 'Morning') and (select Format(checkouttime2,"h:nn:ss") as endout  from schclass where schname like 'Morning') and g.USERID=u.userid and Format(g.checktime,"dd/mm/yyyy")=Format(c.checktime,"dd/mm/yyyy")),'12:00') AS Mout, IIf(Format(Max(checktime),"h:nn:ss") Between (select Format(checkintime1,"h:nn:ss") as startin  from schclass where schname like 'Afternoon') And (select Format(checkintime2,"h:nn:ss") as endin  from schclass where schname like 'Afternoon'),Format(Max(checktime),"h:nn:ss"),'0') AS AIN, IIf(Format(Max(checktime),"h:nn:ss") Between (select Format(checkouttime1,"h:nn:ss") as startOut  from schclass where schname like 'Afternoon') And (select Format(checkouttime2,"h:nn:ss") as endout  from schclass where schname like 'Afternoon'),Format(Max(checktime),"h:nn:ss"),'17:30') AS AOUT 
FROM checkinOut AS c INNER JOIN userinfo AS u ON c.userid = u.userid 
WHERE (((Format([c].[checktime],"yyyymmdd")) Between [dt] And [edate]) AND ((u.ssn) Like [idss])) 
GROUP BY u.ssn, u.name, Format(c.checktime,"dd/mm/yyyy"), u.USERID; 
+0

我已添加基本代碼格式,但仍然無法讀取或者爲什麼沒有解釋什麼被改變了,或者爲什麼。考慮到有很多代碼,這是值得的。 – ADyson