具有两个包含多个 AND 的 SQL 选择语句



无法理解为什么下面的代码不起作用。

WHERE 子句中的第二行和第三行不能协同工作。如果我取出一个(要么(它们就会起作用。我确信我正在做的事情有一个术语,但我找不到它。

SELECT oh.location,SUM(od.net_ext) as retail_sales
FROM comm.dbo.ordhrd as oh
JOIN comm.dbo.ordetail as od
ON od.location = oh.location
AND od.invoice# = oh.invoice#
AND od.inv_date = oh.inv_date
JOIN comm.dbo.invmas as inv
ON inv.item_num = od.item#
WHERE type_of_rec = '01'
AND ( inv.in_group = 'LABM' OR inv.in_group = 'LABQ' OR inv.in_group = 'LABP' )
AND ( inv.category = 'LTAT' OR inv.category = 'LTMT' OR inv.category = 'LTHWY' OR inv.category = 'TOUR' OR inv.category = 'UHP' OR inv.category = 'SNOW' OR inv.category = 'STDLS' )
AND od.inv_date BETWEEN '" . $current_start_date . "' AND '" . $current_end_date . "'
GROUP BY oh.location

预期结果将是筛选查询的结果

您可能希望将in_group、类别和type_of_rec添加到 GROUP BY 子句中。如果您仍然没有收到结果,则有几个可能的原因您的查询是错误的。连接可能没有限制,inv.category 字符串需要'% %'通配符,BETWEEN 子句的格式可能无法正确映射(即:错误的日期格式会抛出结果(等。

或者,坦率地说,可能没有任何记录符合您的 WHERE 子句条件。在注释中,您声明从查询的 WHERE 部分中删除行,使其返回行。这说明什么?重新添加它可能对筛选器的限制太严格,无法返回任何行。

如果不发布示例数据,此站点上的用户几乎不可能判断有效查询可能是什么样子。

我在下面写了一些可能更灵活的东西。它将 WHERE 子句中引用的列添加到 GROUP BY 子句中,使用 IN 子句格式化 AND/OR 子句(提高可读性/限制潜在错误(,并将 JOIN 语句替换为 LEFT JOIN

SELECT oh.location,
SUM(od.net_ext) as retail_sales
FROM comm.dbo.ordhrd as oh
LEFT JOIN comm.dbo.ordetail as od
ON od.location = oh.location
AND od.invoice# = oh.invoice#
AND od.inv_date = oh.inv_date
LEFT JOIN comm.dbo.invmas as inv
ON inv.item_num = od.item#
WHERE type_of_rec = '01'
AND inv.in_group IN ('LABM','LABQ','LABP' )
AND inv.category IN ('LTAT', 'LTMT', 'LTHWY', 'TOUR','UHP', 'SNOW', 'STDLS')
AND od.inv_date BETWEEN '" . $current_start_date . "' AND '" . $current_end_date . "'
GROUP BY oh.location, inv.in_group, inv.category

最新更新