2017-02-10 102 views
0

我寫此查詢數據類型不匹配,ACCESS

SELECT dayar 
FROM dayarim 
WHERE (Year(enter_month) = Year(Now())) 
    OR (Year(enter_month) < Year(Now()) 
     AND Year(left_month) >= Year(Now())) 
     AND (Datediff('m', Iif(Year(enter_month) = Year(Now()), enter_month, 
           '1/1/' + Year(Now())), Now()) * 50) < ( 
      Datediff('m', '1/1/' + Year(Now()), Now()) * 50) 

而且我得到這個錯誤:

Datatype mismatch in criteria expression

我在谷歌搜索,我發現這個錯誤意味着,等於表達這麼想的匹配字段數據類型

我的表:

https://i.gyazo.com/3b1b3a4e948c3ebdd0054c8db4fc7516.png

我的數據:

https://i.gyazo.com/7c52b15914873e5c2eac3f704b156a90.png

我想才達到未支付
他們需要每月支付50名列表,那麼結果將是名稱的列表didnt支付

編輯 由於古斯塔夫評論我明白,我ddint檢查他們支付

01總和

但仍然得到同樣的錯誤

+0

關於日期和年份以及以非常複雜的方式濫用文本,您似乎已經混雜起來了。你想完成什麼? – Gustav

+0

@Gustav,我試圖實現從今年年初到當前月份沒有支付的pepole –

+0

但是'enter_month'和'left_month'是什麼?日期,年份還是? – Gustav

回答

0

與嘗試:

SELECT 
    dayar 
FROM 
    dayarim 
WHERE 
    Year(Nz(left_month, Date())) >= Year(Date()) 
    AND 
    Year(enter_month) <= Year(Date()) 
    AND 
    (SELECT Sum(payments.sum) 
    FROM payments 
    WHERE Year(payments.paymentdate) = Year(Date()) 
     AND payerid = dayarim.id) < (Month(Date()) - 1) * 50 
+0

它不會拋出任何錯誤,但也不能正常工作,現在我會貼我的解決方案,那個朋友幫我 –

0

正確的查詢是:

SELECT dayar 
FROM dayarim 
WHERE (Year(enter_month) = Year(Now())) 
    OR (Year(enter_month) <= Year(Now()) 
     AND Year(left_month) = Year(Now())) 
     AND (SELECT Sum(payments.sum) 
      FROM payments 
      WHERE payments.paymentdate > Dateserial(Year(Now()), 1, 1) 
        AND paymentdate <= Now() 
        AND payerid = dayarim.id) < (Datediff('m', 
               Dateserial(Year(Now( 
               )), 
               1, 1), Now()) * 50); 

我只是替換DateSerial函數的日期,其作品

的bilding

感謝Joe4