难以理解以下代码为何不起作用。
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
预期结果将是过滤查询的结果
答案 0 :(得分:0)
您可能想将in_group,category和type_of_rec添加到GROUP BY子句。如果您仍未收到结果,则可能有多种原因导致您的查询错误。联接可能不受限制,inv.category字符串需要'% %'
通配符,BETWEEN子句的格式可能未正确映射(即:错误的日期格式会导致结果丢失),等等。
或者,坦率地说,可能没有任何记录符合您的WHERE子句条件。在注释中,您声明从WHERE部分删除行,以使查询返回行。这告诉你什么?将其重新添加可能对过滤器的限制太大,无法返回任何行。
如果不发布示例数据,该网站上的用户几乎无法判断有效查询的外观。
我在下面写了一些可能更灵活的内容。它将WHERE子句中引用的列添加到GROUP BY子句,使用IN子句设置AND / OR子句的格式(提高可读性/限制潜在的错误),并用LEFT JOIN替换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