MS Access 查询输出所有值并将不可用值视为零
MS Access Query to output all values and treat unavailable values as zero
我创建了一个查询 MS Access 2010,旨在获取每个日期的所有燃料类型(所有值)。我有以下查询关系:) 并且有以下 6 个燃料类型值:Diesel #2、MSFO、ULSD、Biodiesel、Used Oil、Heat Recovery。
我正在尝试为每个日期输出每种燃料类型的燃料输送量,而不管该日期是否有任何燃料输送
和
。我得到的输出如下
.
我试图改变关系,以便 tbl_FuelType 上的所有值都会输出。这给了我上图的输出。我已经尝试输入一个标准来查找特定的燃料类型(例如 "ULSD"),但是如果那天没有数据,它将输出 Null 值,这是我不想要的。请参阅以下标准
我已经尝试了一些程序流函数,例如 IIF 和 Switch,但仍然得到空值。有没有一种简单的方法可以做到这一点,而不必进入 table 并将 tbl_FuelDelivery 上所有不同燃料类型的值填写为零? SQL视图如下:
SELECT tbl_FuelDelivery.DateLog, Sum(Nz([tbl_FuelDelivery].[F_FO_gal_Gross],0)) AS Fuel_Delivery_Gross, Sum(Nz([tbl_FuelDelivery].[F_FO_gal_Net],0)) AS Fuel_Delivery_Net, tbl_FuelType.FuelType
FROM tbl_FuelType LEFT JOIN tbl_FuelDelivery ON tbl_FuelType.ID = tbl_FuelDelivery.FuelType
GROUP BY tbl_FuelDelivery.DateLog, tbl_FuelType.FuelType
ORDER BY tbl_FuelDelivery.DateLog;
您需要添加到查询中的是包含所有日期的 table。您可以有一个单独的 table 来输入所有日期,例如日历 table 或从您的 tbl_FuelDelivery
派生它,如下所示:
SELECT DISTINCT tbl_FuelDelivery.DateLog
FROM tbl_FuelDelivery;
现在,您需要将此 table 与 tbl_FuelType 交叉连接。 Access 本身不支持交叉联接,因此您必须使用一种解决方法:只需将交叉联接作为逗号分隔 table 添加到您的 FROM 子句中:
SELECT a.DateLog, tbl_FuelType.FuelType, tbl_FuelType.ID
FROM (SELECT DISTINCT tbl_FuelDelivery.DateLog FROM tbl_FuelDelivery) a,
tbl_FuelType;
上面的查询将为您提供所有日期的所有燃料类型。您可以将其另存为新查询(我们称之为 allDatesFuels)。现在,您需要做的就是将它与您的查询结合起来:
SELECT
allDatesFuels.DateLog,
Sum(Nz([tbl_FuelDelivery].[F_FO_gal_Gross],0)) AS Fuel_Delivery_Gross,
Sum(Nz([tbl_FuelDelivery].[F_FO_gal_Net],0)) AS Fuel_Delivery_Net,
allDatesFuels.FuelType
FROM allDatesFuels LEFT JOIN tbl_FuelDelivery ON allDatesFuels.ID = tbl_FuelDelivery.FuelType And allDatesFuels.DateLog = tbl_FuelDelivery.DateLog
GROUP BY allDatesFuels.DateLog, allDatesFuels.FuelType
ORDER BY allDatesFuels.DateLog;
我创建了一个查询 MS Access 2010,旨在获取每个日期的所有燃料类型(所有值)。我有以下查询关系:
我正在尝试为每个日期输出每种燃料类型的燃料输送量,而不管该日期是否有任何燃料输送
我试图改变关系,以便 tbl_FuelType 上的所有值都会输出。这给了我上图的输出。我已经尝试输入一个标准来查找特定的燃料类型(例如 "ULSD"),但是如果那天没有数据,它将输出 Null 值,这是我不想要的。请参阅以下标准
SELECT tbl_FuelDelivery.DateLog, Sum(Nz([tbl_FuelDelivery].[F_FO_gal_Gross],0)) AS Fuel_Delivery_Gross, Sum(Nz([tbl_FuelDelivery].[F_FO_gal_Net],0)) AS Fuel_Delivery_Net, tbl_FuelType.FuelType
FROM tbl_FuelType LEFT JOIN tbl_FuelDelivery ON tbl_FuelType.ID = tbl_FuelDelivery.FuelType
GROUP BY tbl_FuelDelivery.DateLog, tbl_FuelType.FuelType
ORDER BY tbl_FuelDelivery.DateLog;
您需要添加到查询中的是包含所有日期的 table。您可以有一个单独的 table 来输入所有日期,例如日历 table 或从您的 tbl_FuelDelivery
派生它,如下所示:
SELECT DISTINCT tbl_FuelDelivery.DateLog
FROM tbl_FuelDelivery;
现在,您需要将此 table 与 tbl_FuelType 交叉连接。 Access 本身不支持交叉联接,因此您必须使用一种解决方法:只需将交叉联接作为逗号分隔 table 添加到您的 FROM 子句中:
SELECT a.DateLog, tbl_FuelType.FuelType, tbl_FuelType.ID
FROM (SELECT DISTINCT tbl_FuelDelivery.DateLog FROM tbl_FuelDelivery) a,
tbl_FuelType;
上面的查询将为您提供所有日期的所有燃料类型。您可以将其另存为新查询(我们称之为 allDatesFuels)。现在,您需要做的就是将它与您的查询结合起来:
SELECT
allDatesFuels.DateLog,
Sum(Nz([tbl_FuelDelivery].[F_FO_gal_Gross],0)) AS Fuel_Delivery_Gross,
Sum(Nz([tbl_FuelDelivery].[F_FO_gal_Net],0)) AS Fuel_Delivery_Net,
allDatesFuels.FuelType
FROM allDatesFuels LEFT JOIN tbl_FuelDelivery ON allDatesFuels.ID = tbl_FuelDelivery.FuelType And allDatesFuels.DateLog = tbl_FuelDelivery.DateLog
GROUP BY allDatesFuels.DateLog, allDatesFuels.FuelType
ORDER BY allDatesFuels.DateLog;