Ms access 访问查询:Where IIF函数
我有这个疑问Ms access 访问查询:Where IIF函数,ms-access,where,iif,Ms Access,Where,Iif,我有这个疑问 SELECT invoice.number, invoice.amount, invoice.paid, iif (invoice.paid='Y', Max(payments.datePay), '') as invoice_paid FROM payments INNER JOIN invoice ON (invoices.number = payments.numberDoc AND payments.
SELECT
invoice.number,
invoice.amount,
invoice.paid,
iif (invoice.paid='Y', Max(payments.datePay), '') as invoice_paid
FROM
payments
INNER JOIN
invoice
ON (invoices.number = payments.numberDoc AND payments.type = 'Invoice')
WHERE
payments.type= 'Invoice'
GROUP BY
number,
amount,
paid
运行良好
样本结果:
number | amount | paid | invoice_paid
00000003 | 347,94€ | Y | 23/05/2014
00000004 | 462,65€ | N |
00000005 | 462,65€ | Y | 13/08/2014
00000006 | 453,88€ | Y | 03/09/2014
00000007 | 155,57€ | Y | 04/09/2014
00000008 | 500,00€ | N |
但现在我需要按“发票付款”日期过滤。
如果我执行此命令:
SELECT
invoice.number,
invoice.amount,
invoice.paid,
iif (invoice.paid='Y', Max(payments.datePay), '') as invoice_paid
FROM
payments
INNER JOIN
invoice
ON (invoices.number = payments.numberDoc AND payments.type = 'Invoice')
WHERE
payments.type= 'Invoice' AND invoice_paid=#01/01/2014#
GROUP BY
number,
amount,
paid
显示窗口:“引入参数发票\已付款”
如何根据iif函数返回的结果筛选结果?您必须在WHERE条件下使用整个表达式,仅使用别名不起作用,但会导致“输入参数值”框。所以要么
SELECT
invoice.[number],
invoice.[amount],
invoice.[paid],
IIF (invoice.paid='Y', Max(payments.datePay), '') as invoice_paid
FROM
payments
INNER JOIN
invoice
ON (invoices.number = payments.numberDoc AND payments.type = 'Invoice')
WHERE
payments.type= 'Invoice'
AND
IIF (invoice.paid='Y', Max(payments.datePay), '') = #01/01/2014#
GROUP BY
[number],
[amount],
[paid]
或者创建一个查询,然后基于此查询创建另一个查询以获取正确的数据。或子查询 您必须在WHERE条件下使用整个表达式,仅使用别名将不起作用,但会导致“输入参数值”框。所以要么
SELECT
invoice.[number],
invoice.[amount],
invoice.[paid],
IIF (invoice.paid='Y', Max(payments.datePay), '') as invoice_paid
FROM
payments
INNER JOIN
invoice
ON (invoices.number = payments.numberDoc AND payments.type = 'Invoice')
WHERE
payments.type= 'Invoice'
AND
IIF (invoice.paid='Y', Max(payments.datePay), '') = #01/01/2014#
GROUP BY
[number],
[amount],
[paid]
或者创建一个查询,然后基于此查询创建另一个查询以获取正确的数据。或子查询 您必须在WHERE条件下使用整个表达式,仅使用别名将不起作用,但会导致“输入参数值”框。所以要么
SELECT
invoice.[number],
invoice.[amount],
invoice.[paid],
IIF (invoice.paid='Y', Max(payments.datePay), '') as invoice_paid
FROM
payments
INNER JOIN
invoice
ON (invoices.number = payments.numberDoc AND payments.type = 'Invoice')
WHERE
payments.type= 'Invoice'
AND
IIF (invoice.paid='Y', Max(payments.datePay), '') = #01/01/2014#
GROUP BY
[number],
[amount],
[paid]
或者创建一个查询,然后基于此查询创建另一个查询以获取正确的数据。或子查询 您必须在WHERE条件下使用整个表达式,仅使用别名将不起作用,但会导致“输入参数值”框。所以要么
SELECT
invoice.[number],
invoice.[amount],
invoice.[paid],
IIF (invoice.paid='Y', Max(payments.datePay), '') as invoice_paid
FROM
payments
INNER JOIN
invoice
ON (invoices.number = payments.numberDoc AND payments.type = 'Invoice')
WHERE
payments.type= 'Invoice'
AND
IIF (invoice.paid='Y', Max(payments.datePay), '') = #01/01/2014#
GROUP BY
[number],
[amount],
[paid]
或者创建一个查询,然后基于此查询创建另一个查询以获取正确的数据。或子查询 我认为您不希望这里有一个
WHERE
,而是一个具有
,因为您希望在聚合后对值进行过滤
尝试使用:
where payments.type='Invoice'
GROUB BY ...
HAVING iif(invoice.paid='Y',max(payments.datePay),'') = #01/01/2014#
我认为您不希望这里有一个
WHERE
,而是一个具有
,因为您希望在聚合后对值进行过滤
尝试使用:
where payments.type='Invoice'
GROUB BY ...
HAVING iif(invoice.paid='Y',max(payments.datePay),'') = #01/01/2014#
我认为您不希望这里有一个
WHERE
,而是一个具有
,因为您希望在聚合后对值进行过滤
尝试使用:
where payments.type='Invoice'
GROUB BY ...
HAVING iif(invoice.paid='Y',max(payments.datePay),'') = #01/01/2014#
我认为您不希望这里有一个
WHERE
,而是一个具有
,因为您希望在聚合后对值进行过滤
尝试使用:
where payments.type='Invoice'
GROUB BY ...
HAVING iif(invoice.paid='Y',max(payments.datePay),'') = #01/01/2014#
其他答案是准确的,但让我试着为你澄清一些事情,然后问一个问题 您正在计算的“invoice_paid”列不能在where子句的别名结果列中使用,您必须使用表本身的原始原始日期,例如
WHERE payments.type= 'Invoice' AND payments.datePay=#01/01/2014#
您也不能在where子句中使用MAX(payments.datepay)这样的聚合,它必须位于用户iDevlop所指出的分组子句之后的HAVING子句中
您有一个特定日期的过滤器(基于=),但没有一个数据显示这样的日期。所以,这不仅可能不会通过WHERE或HAVING方法返回结果(或很少返回)。如果您正在寻找特定日期的付款,我将直接查询并显示
现在,问题来了。你只想要一个日期,还是你真的想得到任何发票的最大(datePay)值大于或等于2014年1月1日的日期?如果是这样,请将平等测试改为>=#01/01/2014#其他答案都是准确的,但让我试着为您澄清一些事情,然后问一个问题 您正在计算的“invoice_paid”列不能在where子句的别名结果列中使用,您必须使用表本身的原始原始日期,例如
WHERE payments.type= 'Invoice' AND payments.datePay=#01/01/2014#
您也不能在where子句中使用MAX(payments.datepay)这样的聚合,它必须位于用户iDevlop所指出的分组子句之后的HAVING子句中
您有一个特定日期的过滤器(基于=),但没有一个数据显示这样的日期。所以,这不仅可能不会通过WHERE或HAVING方法返回结果(或很少返回)。如果您正在寻找特定日期的付款,我将直接查询并显示
现在,问题来了。你只想要一个日期,还是你真的想得到任何发票的最大(datePay)值大于或等于2014年1月1日的日期?如果是这样,请将平等测试改为>=#01/01/2014#其他答案都是准确的,但让我试着为您澄清一些事情,然后问一个问题 您正在计算的“invoice_paid”列不能在where子句的别名结果列中使用,您必须使用表本身的原始原始日期,例如
WHERE payments.type= 'Invoice' AND payments.datePay=#01/01/2014#
您也不能在where子句中使用MAX(payments.datepay)这样的聚合,它必须位于用户iDevlop所指出的分组子句之后的HAVING子句中
您有一个特定日期的过滤器(基于=),但没有一个数据显示这样的日期。所以,这不仅可能不会通过WHERE或HAVING方法返回结果(或很少返回)。如果您正在寻找特定日期的付款,我将直接查询并显示
现在,问题来了。你只想要一个日期,还是你真的想得到任何发票的最大(datePay)值大于或等于2014年1月1日的日期?如果是这样,请将平等测试改为>=#01/01/2014#其他答案都是准确的,但让我试着为您澄清一些事情,然后问一个问题 您正在计算的“invoice_paid”列不能在where子句的别名结果列中使用,您必须使用表本身的原始原始日期,例如
WHERE payments.type= 'Invoice' AND payments.datePay=#01/01/2014#
您也不能在where子句中使用MAX(payments.datepay)这样的聚合,它必须位于用户iDevlop所指出的分组子句之后的HAVING子句中
您有一个特定日期的过滤器(基于=),但没有一个数据显示这样的日期。所以,这不仅可能不会通过WHERE或HAVING方法返回结果(或很少返回)。如果您正在寻找特定日期的付款,我将直接查询并显示
现在,问题来了。你只知道吗