我正在尝试使用输入变量检索数据,该输入变量是客户代码。如果用户输入客户代码,查询将检索该客户数据,但如果用户将客户代码留空,我想检索所有客户数据。下面是我可以根据'3_customer'中的客户代码输入检索数据的代码,但我无法弄清楚如何执行此IF-THEN-ELSE类型的查询我需要为所有客户获取数据(如果输入变量)留空。
谢谢, 唐
SELECT
open_item.order_id order_id,
convert(varchar(10),orders.ordered_date,101) order_date,
orders.revenue_code_id,
orders.operations_user,
open_item.customer_id cust_no,
customer.name cust_name,
convert(varchar(10),open_item.gl_date,101) adjust_date,
open_item.amount amount,
open_item.record_type type,
open_item.ar_reason_code_id,
ar_reason_code.descr reason
FROM
open_item
LEFT OUTER JOIN
customer ON customer.id = open_item.customer_id
LEFT OUTER JOIN
ar_reason_code ON open_item.ar_reason_code_id = ar_reason_code.id
LEFT OUTER JOIN
orders ON orders.id = open_item.order_id
WHERE
open_item.gl_date >= $1_sdate$ AND
open_item.gl_date <= $2_edate$ AND
open_item.source = 'C' AND
open_item.record_type = 'C' AND
open_item.customer_id = $3_customer$
答案 0 :(得分:2)
另一种方法是:
open_item.customer_id = coalesce($3_customer$, open_item.customer_ID)
假设$ 3_customer $将为NULL
所以$ 3_customer $不能为空,所以请使用案例
open_item.customer_id = case when $3_customer$ = ''
then open_item.customer_ID else $3_customer$
coalesce获取系列中的第一个非null值本质上,当customer参数为null时,它总是返回TRUE。它这样做是因为它比较了相同的值,因此总是相等;否则,这将过滤特定的$ 3_customer $提供的
答案 1 :(得分:1)
您需要稍微更改客户条件的WHERE
子句:
and open_item.customer_id = $3_customer$
这样的事情:(以下代码假设$3_customer$
已插入查询字符串,如果为空则将设置为NULL
and ($3_customer$ IS NULL OR open_item.customer_id = $3_customer$)