更新访问查询中的空白单元格

Posted

技术标签:

【中文标题】更新访问查询中的空白单元格【英文标题】:Updating blank cells in access query 【发布时间】:2015-06-05 14:30:23 【问题描述】:

我有大约 40,000 行,我正在尝试更新所有空白单元格 在 _Data table"UNKNOWN" 的标题 Claim_Status 下或在表 "Status" 中输出 Claim_Status。当我运行选择查询时,行数急剧减少到 20,000。问题是我需要全部 40,000 行。

IIf(IsNull([_DATA]![Claim_Status]),"UNKNOWN",[Status]![Claim_Status])

例如,

我有一行在 _Data 表的 ehading Claim_Status 下有一个空(空)单元格。当我运行查询时,我仍然应该在“Claim_Status”中添加“UNKNOWN”而不是空单元格的这一行。

但是,当我运行查询时,该行消失了,总行数下降到大约 20,000。我猜已经消失的行也有类似的问题。

我正在运行“选择”查询而不是“更新”查询以获取您的信息。

此外,Claim_Status 的输出不是 _Data 表中的值,而是与其链接的值。 _Data 表中的 Claim_Status 列与另一个名为“Status”的表中的 Data_Status_Type 相关联,输出是与 Data_Status_Type 中的值对应的任何内容。

这是造成整个麻烦的原因吗?

已编辑)

SQL 代码

   SELECT [_DATA].Claimant_Name, [_DATA].Account_ID, [_DATA].Claim_ID, [_DATA].Account_Name, [_DATA].Claim_Type, [_DATA].Coverage, [_DATA].Claim_Level, [_DATA].Claim_Count, [_DATA].File_Date, [_DATA].File_Year, [_DATA].Resolution_Date, [_DATA].Resolution_Year, Status.Claim_Status, [_DATA].Indemnity_Paid, Disease.Disease_Category, State.State_Filed, [_DATA].First_Exposure_Date, [_DATA].Last_Exposure_Date, [_DATA].Claimant_Employee, [_DATA].Claimant_DOB, [_DATA].Claimant_Deceased, [_DATA].Claimant_DOD, [_DATA].Claimant_Diagnosis_Date, [_DATA].Product_Type, [_DATA].Product_Line, [_DATA].[Company/Entity/PC], [Plaintiff Firm].Plaintiff_Law_Firm, [_DATA].Asbestos_Type, [_DATA].Evaluation_Date, [_DATA].Tier, [_DATA].Data_Source, [_DATA].Data_Source_Category, [_DATA].[Jurisdiction/County], [_DATA].Settlement_Demand, [_DATA].Jury_Verdict, [_DATA].Exposure_Site, [_DATA].National_Defendant_Firm, [_DATA].Local_Defendant_Firm, [_DATA].Expense_Amount, [_DATA].NCC_Expense_Amount, [_DATA].Non_NCC_Expense_Amount
FROM (((_DATA LEFT JOIN Disease ON [_DATA].Disease_Category = Disease.Data_Disease_Type) LEFT JOIN [Plaintiff Firm] ON [_DATA].Plaintiff_Law_Firm = [Plaintiff Firm].Data_Firm) LEFT JOIN State ON [_DATA].State_Filed = State.Data_State) LEFT JOIN Status ON [_DATA].Claim_Status = Status.Data_Status_Type
WHERE (((Status.Claim_Status)=IIf(IsNull([_DATA]![Claim_Status]),"UNKNOWN",[Status]![Claim_Status])));

【问题讨论】:

您能给我们提供大约 4 条记录吗?这 4 条记录中哪些本应被选中并没有被选中,以及您的查询? 你也可以给我们整个查询,看看里面有没有什么? 我已经编辑了我的帖子,如果您需要更多信息,请告诉我 我对以下两个语句I am trying to update any blank cells...I am running a 'selection' query not 'update' query... 感到非常困惑,你能不能只为你的查询发布整个SQL? IIf(IsNull([_DATA]![Claim_Status]),"UNKNOWN",[Status]![Claim_Status]) 这行是我在查询设计中为 Criteria 写的 【参考方案1】:

如果我正确理解您的要求,即返回最左侧表[_DATA] 中的所有行,并将[_DATA]![Claim_Status] 中的NULL 替换为“UNKNOWN”,那么您应该删除WHERE子句,并将该字段添加到 Nz 函数 (http://www.techonthenet.com/access/functions/advanced/nz.php) 内的 SELECT 语句中。下面是示例 SQL:

 SELECT Nz([_DATA]![Claim_Status], "UNKNOWN") As [_DATA_Claim_Status], [_DATA].Claimant_Name, [_DATA].Account_ID, [_DATA].Claim_ID, [_DATA].Account_Name, [_DATA].Claim_Type, [_DATA].Coverage, [_DATA].Claim_Level, [_DATA].Claim_Count, [_DATA].File_Date, [_DATA].File_Year, [_DATA].Resolution_Date, [_DATA].Resolution_Year, Status.Claim_Status, [_DATA].Indemnity_Paid, Disease.Disease_Category, State.State_Filed, [_DATA].First_Exposure_Date, [_DATA].Last_Exposure_Date, [_DATA].Claimant_Employee, [_DATA].Claimant_DOB, [_DATA].Claimant_Deceased, [_DATA].Claimant_DOD, [_DATA].Claimant_Diagnosis_Date, [_DATA].Product_Type, [_DATA].Product_Line, [_DATA].[Company/Entity/PC], [Plaintiff Firm].Plaintiff_Law_Firm, [_DATA].Asbestos_Type, [_DATA].Evaluation_Date, [_DATA].Tier, [_DATA].Data_Source, [_DATA].Data_Source_Category, [_DATA].[Jurisdiction/County], [_DATA].Settlement_Demand, [_DATA].Jury_Verdict, [_DATA].Exposure_Site, [_DATA].National_Defendant_Firm, [_DATA].Local_Defendant_Firm, [_DATA].Expense_Amount, [_DATA].NCC_Expense_Amount, [_DATA].Non_NCC_Expense_Amount
 FROM (((_DATA LEFT JOIN Disease ON [_DATA].Disease_Category = Disease.Data_Disease_Type) LEFT JOIN [Plaintiff Firm] ON [_DATA].Plaintiff_Law_Firm = [Plaintiff Firm].Data_Firm) LEFT JOIN State ON [_DATA].State_Filed = State.Data_State) LEFT JOIN Status ON [_DATA].Claim_Status = Status.Data_Status_Type;

WHERE 子句没有达到预期的效果,因为它所说的是如果[_DATA]![Claim_Status] 为 Null,则返回 Status.Claim_Status = "UNKNOWN" 的行,否则返回 Status.Claim_Status 等于自身的行。而且,由于您在 WHERE 子句中包含了一个外部连接表,因此您实际上将其转换为 INNER JOIN

【讨论】:

以上是关于更新访问查询中的空白单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何从查询结果中将一行中的单元格设为空白?

使用第一个空白上方单元格中的值填充非连续空白单元格

如何将具有数据的单元格与同一列中的空白单元格合并?

如何根据ID更新另一张纸上的行而不用空白单元格覆盖?

如何增加(更新)SQL 表中的单元格?在查询中

在 C# 代码中的 DB 中的 Linq 查询中包含空单元格