Aufgrund einiger seltsamer Umstände scheinen zufällige Langtextfelder in meiner Microsoft Access-Datenbank beschädigt zu sein und werden durch "#################" ersetzt. Ich möchte in der Lage sein, die Anzahl der beschädigten Felder mit einer SQL-Abfrage zu zählen, damit ich schnell überprüfen kann, ob sich die Anzahl geändert hat.

Ich habe eine Abfrage geschrieben, die die Anzahl der Datensätze mit beschädigten Werten zählen kann, aber nicht die Gesamtzahl der Felder (z. B. wenn 5 Datensätze 13 beschädigte Werte haben, kann ich die Nummer 5 erhalten, möchte aber die Gesamtzahl von 13). Wie kann ich meine Abfrage anpassen?

SELECT Count(*) AS [Number of Errors] 
FROM GPInformation 
WHERE Profile="################" 
   OR Notes="################" 
   OR CriminalConvictionsNotes="################" 
   OR HealthIssueNotes="################" 
   OR NextOfKinAddress="################"

Ausgabe:

output screenshot of microsoft access

0
mbdavis 26 Dez. 2015 im 19:06

3 Antworten

Beste Antwort

Sie können der select bedingte Logik hinzufügen:

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 26 Dez. 2015 im 16:32

Hier ist eine Möglichkeit durch unpivoting die Daten

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 
2
Pரதீப் 26 Dez. 2015 im 16:10

Sie können die Abfrage wie folgt umschreiben:

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

Ich habe diesen Code nicht getestet (es fehlt die unmittelbare Möglichkeit, dies zu tun), aber er sollte funktionieren oder zumindest sehr nahe an der Korrektur liegen.

2
Ken Clement 26 Dez. 2015 im 16:26