我刚开始学习sql,我有一个vba功能,我想转换为一个简单的SQL。我有4个表需要加入然后我需要一个总计数日期> date1&日期< date2和status = status_string和county = countyname(date1,date2,status_string,county name是变量)。
SELECT COUNT(*), table1.date, table2.status, table3.county
FROM table1
INNER JOIN table1 ON table1.status=table2.staus
INNER JOIN table1 ON table1.cust_id=table3.cust_id
INNER JOIN table3 ON table3.countyid=table4.countyname
WHERE table4.status = Status_string and [table1.Date] > date_varaible_1 and [table1.Date] < date_varaible_2 and [table.county]=countyname
任何帮助纠正这一点都会很棒。
TY
答案 0 :(得分:0)
您的查询需要调整一些内容:
JOIN
语句不正确,因为您多次将 Table1 连接到自身(允许自连接),但您可以参考 Table2 , Table3 和 Table4 不存在。只需通过这些表格加入。可能这些都是简单的错别字。[table].[field]
。GROUP BY
。在SQL中,聚合查询的SELECT
中的所有非聚合(或单元级)列都被视为分组,因此必须在GROUP BY
中声明。根据Query Performance Tips的建议,考虑日期范围的BETWEEN
条款:
让搜索引擎在一次评估中查找值 而不是两个
SQL 查询调整
SELECT COUNT(*), table1.date, table2.status, table3.county
FROM ((table1
INNER JOIN table2 ON table1.status = table2.staus)
INNER JOIN table3 ON table1.cust_id = table3.cust_id)
INNER JOIN table4 ON table3.countyid = table4.countyname
WHERE table1.[Date] BETWEEN date_variable_1 AND date_variable_2
AND table3.[county] = countyname
AND table4.[status] = Status_string
GROUP BY table1.date, table2.status, table3.county