这是一个关于 MS Access 的新手问题。新手,我不知道如何正确提出有关 MS Access 的问题。因此,请原谅任何违规行为。
假设我有一个包含以下字段的数据库:
现在高度是以厘米为单位的度量。假设我们的高度测量出了问题,并且对于某些日期和组,而不是厘米,英寸被输入到数据库中。假设有太多的值无法在数据库中实际更改它们。所以我需要使用 MS Access 工具来应用它。为简单起见,假设将英寸值除以 0.4 会将单位转换为厘米。
除 2013 年 10 月 4 日和 2013 年 10 月 5 日正确输入高度外,2012 年和 2013 年所有 A 组的高度都被错误输入。
所以问题是,我如何(我的想法是在查询的设计 View 中使用标准字段)使用上面指定的日期标准(包括 10 月异常(exception))将高度从英寸转换为厘米?
即使将我指向正确的方向也会非常有帮助。我习惯了不同的编程语言,这让我不知道从哪里开始。
更新
在我匆忙开发一个简单的例子时,我忽略了我试图将这个功能添加到现有查询中。 @winghei 的答案可能是完美的。但是我不清楚在哪里将它添加到我的现有
sql
我的查询中的代码。这是已经存在的代码:SELECT LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height
FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));
所以现在的问题是,我在哪里添加@winghei 的代码?
更新 2
所以我仍然无法添加这个查询。
SELECT LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height
FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));
UPDATE(SELECT LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height
FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));)
SET `Heightcm`=`Height`/.4
WHERE `Trawl_Date` <> #10/4/2013# AND `Trawl_Date` <> #10/5/2013# AND `GROUP` = "A" AND Year(`Trawl_Date`) = 2012 AND Year(`Trawl_Date`) = 2013
这导致此错误:
Characters found after end of SQL statement
于是我将上面的查询命名为
Temp_Query
,保存它然后尝试这个:UPDATE(Temp_Query)
SET `Heightcm`=`Height`/.4
WHERE `Trawl_Date` <> #10/4/2013# AND `Trawl_Date` <> #10/5/2013# AND `GROUP` = "A" AND Year(`Trawl_Date`) = 2012 AND Year(`Trawl_Date`) = 2013
这样处理。但是,在数据表 View 中查看此尝试时,只有
Heightcm
生成列,而我想做的是将修改后的列作为列添加到整个数据中。这里有什么想法吗?
更新 3
应@krish KM 的请求发布了表定义(SAMPLE)
Table: SAMPLE Page: 1
Properties
AlternateBackShade: 100 AlternateBackThemeC -1
AlternateBackTint: 100 BackShade: 100
BackTint: 100 DatasheetForeTheme -1
DatasheetGridlinesTh -1 DateCreated: 2013-02-27 8:14:59 PM
DefaultView: 2 DisplayViewsOnShare 1
FilterOnLoad: False GUID: {guid {9ADCA5B5-
DCFF-49DB-BBC2-
HideNewField: False LastUpdated: 2016-10-12 9:39:47 AM
NameMap: Long binary data OrderByOn: False
OrderByOnLoad: True Orientation: Left-to-Right
PublishToWeb: 1 ReadOnlyWhenDiscon False
RecordCount: 55907 ThemeFontIndex: -1
TotalsRow: False Updatable: True
最佳答案
没有您的表定义,很难为您提供“好的”解决方案。
如果您的以下查询显示正确的行。您可以使用它来更新示例表。
**
SELECT
LAKE.NAME_TXT AS [Group],
TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date,
Year([TRAWL_TRIP_DAT]) AS [Year],
SAMPLE.WEIGHT_NUM AS Height
SAMPLE.its_unique_identifier
FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));
您的更新查询应如下所示:
编辑
UPDATE SAMPLE
inner join qry_exp_sampledata2 on sample.sample_id = qry_exp_sampledata2.sample_id
SET sample.new_WEIGHT_NUM = (WEIGHT_NUM / 0.4)
不需要 where 条件,因为您的 above_query 只包含您有兴趣更新的行。更新后检查值是否正确,理想情况下进行二次更新以使用正确的值更正 WEIGHT_NUM 字段。
更正值后,您可以删除 new_num_weight 列,因为无论如何这都是“临时”列。
发布您的表定义,以便我们更多地了解您要查找的内容。
关于date - 将操作应用于具有不规则日期条件的数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39151099/