2015-12-26 3 views
0

Из-за некоторых странных обстоятельств случайные длинные текстовые поля в моей базе данных 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="################" 

Выходные:

output screenshot of microsoft access

ответ

0

Вы можете добавить условную логику к 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 = "################"; 
+0

работал как шарм! были некоторые отсутствующие круглые скобки, поэтому я предложил редактировать ваше сообщение – mbdavis

2

Вот один из способов по 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 
+0

Хмм ... это дает результат 704 ошибок, что невозможно, поскольку существует 5 записей с ошибками, и мы рассматриваем только 5 полей для каждой записи .... – mbdavis

+0

вы можете разместить эти 5 записей в качестве данных образца –

+0

Я бы с удовольствием, но данные частные. Сожалею! Спасибо за вашу помощь в любом случае – mbdavis

2

Вы можете переписать запрос следующим образом:

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="################" 

Я не проверял этот код (не имеющий немедленный объект, чтобы сделать это), но он должен работать или, по крайней мере, очень близко к правильному.

Смежные вопросы