2017-02-10 89 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