计算值在列中出现的次数
Count number of times value appears in columns
由于某些奇怪的情况,我的 Microsoft Access 数据库中的随机长文本字段似乎已损坏并被替换为“################”。我希望能够使用 SQL 查询来计算损坏字段的数量,以便我可以快速检查该数字是否已更改。
我编写了一个查询,可以计算具有损坏值的记录数,但不能计算总字段数(例如,如果 5 条记录有 13 个损坏值,我可以获得数字 5,但我希望总数为 13 ).如何调整我的查询?
SELECT Count(*) AS [Number of Errors]
FROM GPInformation
WHERE Profile="################"
OR Notes="################"
OR CriminalConvictionsNotes="################"
OR HealthIssueNotes="################"
OR NextOfKinAddress="################"
输出:
这是unpivoting
数据
的一种方式
SELECT Count(error_data) AS [Number of Errors]
FROM (SELECT 1 AS error_Data
FROM gpinformation
WHERE profile = "################"
UNION ALL
SELECT 1
FROM gpinformation
UNION ALL
SELECT 1
FROM gpinformation
WHERE notes = "################"
UNION ALL
SELECT 1
FROM gpinformation
WHERE criminalconvictionsnotes = "################"
UNION ALL
SELECT 1
FROM gpinformation
WHERE healthissuenotes = "################"
UNION ALL
SELECT 1
FROM gpinformation
WHERE nextofkinaddress = "################") A
您可以将条件逻辑添加到 select
:
SELECT (sum(iif(Profile = "################", 1, 0)) +
sum(iif(Notes = "################", 1, 0)) +
sum(iif(CriminalConvictionsNotes = "################", 1, 0)) +
sum(iif(HealthIssueNotes = "################", 1, 0)) +
sum(iif(NextOfKinAddress = "################", 1, 0))
) AS NumBadValues
FROM GPInformation
WHERE Profile = "################" OR
Notes = "################" OR
CriminalConvictionsNotes = "################" OR
HealthIssueNotes = "################" OR
NextOfKinAddress = "################";
您可以按如下方式重写查询:
SELECT SUM(
IIf(Profile="################", 1, 0) +
IIf(Notes="################", 1, 0) +
IIf(CriminalConvictionsNotes="################", 1, 0) +
IIf(HealthIssueNotes="################", 1, 0) +
IIf(NextOfKinAddress="################", 1, 0))
AS [Number of Errors]
FROM GPInformation
WHERE Profile="################"
OR Notes="################"
OR CriminalConvictionsNotes="################"
OR HealthIssueNotes="################"
OR NextOfKinAddress="################"
我没有测试过这段代码(缺乏立即执行此操作的便利),但它应该可以工作或者至少非常接近正确。
由于某些奇怪的情况,我的 Microsoft Access 数据库中的随机长文本字段似乎已损坏并被替换为“################”。我希望能够使用 SQL 查询来计算损坏字段的数量,以便我可以快速检查该数字是否已更改。
我编写了一个查询,可以计算具有损坏值的记录数,但不能计算总字段数(例如,如果 5 条记录有 13 个损坏值,我可以获得数字 5,但我希望总数为 13 ).如何调整我的查询?
SELECT Count(*) AS [Number of Errors]
FROM GPInformation
WHERE Profile="################"
OR Notes="################"
OR CriminalConvictionsNotes="################"
OR HealthIssueNotes="################"
OR NextOfKinAddress="################"
输出:
这是unpivoting
数据
SELECT Count(error_data) AS [Number of Errors]
FROM (SELECT 1 AS error_Data
FROM gpinformation
WHERE profile = "################"
UNION ALL
SELECT 1
FROM gpinformation
UNION ALL
SELECT 1
FROM gpinformation
WHERE notes = "################"
UNION ALL
SELECT 1
FROM gpinformation
WHERE criminalconvictionsnotes = "################"
UNION ALL
SELECT 1
FROM gpinformation
WHERE healthissuenotes = "################"
UNION ALL
SELECT 1
FROM gpinformation
WHERE nextofkinaddress = "################") A
您可以将条件逻辑添加到 select
:
SELECT (sum(iif(Profile = "################", 1, 0)) +
sum(iif(Notes = "################", 1, 0)) +
sum(iif(CriminalConvictionsNotes = "################", 1, 0)) +
sum(iif(HealthIssueNotes = "################", 1, 0)) +
sum(iif(NextOfKinAddress = "################", 1, 0))
) AS NumBadValues
FROM GPInformation
WHERE Profile = "################" OR
Notes = "################" OR
CriminalConvictionsNotes = "################" OR
HealthIssueNotes = "################" OR
NextOfKinAddress = "################";
您可以按如下方式重写查询:
SELECT SUM(
IIf(Profile="################", 1, 0) +
IIf(Notes="################", 1, 0) +
IIf(CriminalConvictionsNotes="################", 1, 0) +
IIf(HealthIssueNotes="################", 1, 0) +
IIf(NextOfKinAddress="################", 1, 0))
AS [Number of Errors]
FROM GPInformation
WHERE Profile="################"
OR Notes="################"
OR CriminalConvictionsNotes="################"
OR HealthIssueNotes="################"
OR NextOfKinAddress="################"
我没有测试过这段代码(缺乏立即执行此操作的便利),但它应该可以工作或者至少非常接近正确。