2009-12-28 5 views
0

J'ai une table avec une colonne TestNumber avec quatre possibilités (ex: 1 - 4), une colonne TestDate et d'autres données. Je veux faire une requête qui retournera une année définie par l'utilisateur et les numéros de test. Par exemple, je veux retourner les numéros de test 1 et 2 qui ont une date à l'année 2008.Requête SQL pour renvoyer les numéros de test spécifiés et la date

Edit: Je veux essentiellement de combiner ces deux déclarations dans une déclaration:

SELECT * FROM testTable WHERE testNumber = '1' AND '2' 
SELECT * FROM testTable WHERE testDate between #01/01/2008# and #01/01/2009# 
+0

Est-ce que "testNumber" est un champ de texte ou une valeur numérique? Si numérique, perdez les citations. –

+0

testNumber est une chaîne. La table actuelle utilise les numéros de piste pour le numéro de test ('16L, 34R'). – ScottK

Répondre

3

Essayez ceci:

SELECT * 
FROM testTable 
WHERE testNumber IN ('1', '2') 
    AND testDate between #01/01/2008# and #01/01/2009# 
+0

J'utilise actuellement l'accès – ScottK

+1

@ScottK: il est crucial de spécifier le moteur de base de données lorsque vous posez des questions SQL. Sinon, vous obtenez des réponses parfaitement bien intentionnées mais pas utiles (comme celle de Cast()). –

+0

Je pense que cette réponse est fausse car elle ne renvoie pas les mêmes résultats que l'UNION des 2 instructions SQL de la question initiale. L'AND devrait être changé en OU, non? –

3

Je ne suis pas sûr que quelqu'un ait déjà répondu correctement. @Manu combine les critères, au lieu des ensembles de résultats, afin qu'il n'obtienne pas deux instructions SQL de l'UNION des questionneurs. Il me semble, il devrait être:

SELECT * FROM testTable WHERE testNumber In ('1', '2') 
    OR testDate between #01/01/2008# and #12/31/2008# 

Notez que certains moteurs de base de données (y compris Jet/ACE) interprètent les valeurs d'une ENTRE/ET paire inclusivement, de sorte que les critères devraient être les première et dernière date de l'année, plutôt que le 1er janvier des deux années.

Mais cela dépendra en fait de l'interprétation de BETWEEN/AND par le moteur db particulier.

Notez également que si les champs de date ont des parties de temps, vous devrez utiliser:

testDate >= #01/01/2008# and testDate < #01/01/2009# 

... au lieu de ENTRE/ET.

+0

La réponse de Manu est ce qui a fonctionné pour moi. J'ai un formulaire où l'utilisateur choisit quel testNumbers ils veulent (via les cases à cocher) et quelle année ils veulent (via la combo). J'utilise ceux pour la requête. – ScottK

+0

Merci pour l'info sur BETWEEN/ET concernant les dates! Je n'étais pas sûr si c'était inclusif ou non. – ScottK

+0

Si la réponse de @ Manu vous a donné des résultats corrects, vous avez clairement indiqué le jeu de résultats dont vous aviez besoin. Vous avez dit que vous aviez besoin de la combinaison de deux jeux de résultats, ce qui nécessite un OR. Peut-être devriez-vous modifier votre question pour refléter le fait que vous * n'avez pas * voulu l'UNION des deux déclarations sélectionnées que vous avez publiées, mais une seule déclaration qui combine les deux critères. –

Questions connexes