我有访问查询,该查询执行并集,分组,获取最大值,左联接和IIF(isNull)函数。我必须合并三个子表并按列“ mainid”分组,从“时间”列中获取最大值,作为“ MaxSubTime”,并且mainid列由mainTable.id过滤。然后我将LEFT Join MainTable应用于Union-Group。如果MaxSubTime为Null,那么我将MainTable.endtime应用于MaxSubTime并将其获取为“ MaxMainTableEndTime”。到这里为止一切正常。
string myQry = "SELECT MainTable.id, MainTable.sttime, IIF(IsNULL(a.MaxSubTime), MainTable.endtime, a.MaxSubTime) AS MaxMainTableEndTime
FROM (MainTable LEFT JOIN (SELECT mainid, MAX(SubTime) AS MaxSubTime
FROM (SELECT Sub_table_1.mainid, Sub_table_1.time AS SubTime FROM Sub_table_1
UNION SELECT Sub_table_2.mainid, Sub_table_2.time AS SubTime Sub_table_2
UNION SELECT Sub_table_3.mainid, Sub_table_3.time AS SubTime Sub_table_3 GROUP BY mainid) AS a ON a.mainid = MainTable.id)
WHERE MaxMainTableEndTime >= #" + DateTime.Now + "# ";
但是当我通过“ MaxMainTableEndTime”过滤最终查询时,出现此错误“没有为一个或多个必需参数提供值”。我在哪里做谜题?
我通过使用“ Having”子句并稍加编辑我的代码解决了这个问题
string myQry = "SELECT MainTable.id, MainTable.sttime, a.MaxSubTime
FROM MainTable LEFT JOIN (SELECT mainid, MAX(SubTime) AS MaxSubTime
FROM(SELECT Sub_table_1.mainid, Sub_table_1.time AS SubTime FROM Sub_table_1
UNION SELECT Sub_table_2.mainid, Sub_table_2.time AS SubTime Sub_table_2
UNION SELECT Sub_table_3.mainid, Sub_table_3.time AS SubTime Sub_table_3
GROUP BY mainid HAVING MaxSubTime >= #" + DateTime.Now + "#)
AS a ON a.mainid = MainTable.id) WHERE MainTable.endtime >= #" + DateTime.Now + "# "