Comment créer une requête SQL dans Excel 2007 avec une plage de dates dynamique?

2

J'essaie de créer un tableur de rapports pouvant imprimer des rapports pour une période donnée. La requête ci-dessous fonctionne, mais lorsque j'essaie d'utiliser un ?paramètre à la place de la date, une erreur survient après la sélection d'une cellule contenant ma date. Si j'utilise des guillemets simples, ('?')je reçois une conversion de chaîne en échec de date / heure, sinon, (?)je reçois une erreur de syntaxe proche @p1.

Finalement, j'aurai besoin d'une date de début et de fin ou d'une formule ajoutant un mois ou un décalage à la date / heure de début pour filtrer les données en informations importantes. La requête a été créée dans Microsoft Query.

SELECT FloatTable.DateAndTime,
       TagTable.TagName
FROM   master.dbo.FloatTable FloatTable,
       master.dbo.TagTable TagTable
WHERE  FloatTable.TagIndex = TagTable.TagIndex
       AND (( FloatTable.DateAndTime >= {ts '2012-06-01 00:00:00'} )) 

Toute aide serait grandement appréciée.

Jordan
la source

Réponses:

3

Vous devez entrer la requête sous forme de formule plutôt que de texte et créer la date à partir de la cellule que vous avez sélectionnée pour créer une instruction SQL valide.

En supposant que vous avez une date dans la cellule A1, insérez la formule suivante dans la cellule B1:

="SELECT FloatTable.DateAndTime, TagTable.TagName FROM master.dbo.FloatTable _ 
FloatTable, master.dbo.TagTable TagTable WHERE FloatTable.TagIndex = _
TagTable.TagIndex AND ((FloatTable.DateAndTime>={ts '" & YEAR(A1) & "-" _
& MONTH(A1) & "-" & DAY(A1) & " 00:00:00'}))"

Notez que les traits de soulignement à la fin de chaque ligne indiquent la continuation. Vous devrez les supprimer et le retour chariot pour que la formule fonctionne. La formule entière est configurée sur une seule ligne ci-dessous. (Difficile à lire sur ce site, mais Excel l'aime bien!)

="SELECT FloatTable.DateAndTime, TagTable.TagName FROM master.dbo.FloatTable FloatTable, master.dbo.TagTable TagTable WHERE FloatTable.TagIndex = TagTable.TagIndex AND ((FloatTable.DateAndTime>={ts '" & YEAR(A1) & "-" & MONTH(A1) & "-" & DAY(A1) & " 00:00:00'}))"
Jon Crowell
la source