recherche - format date access requete




Application d'une opération à un champ de données avec des critères de date irréguliers (3)

En supposant que vous avez les critères suivants: DATE <> 10/4/2013 , DATE <> 10/5/2013, GROUP = "A", Year(Date) = 2012, Year(Date) = 2013 et vous souhaitez mettre à jour Height à centimètre par Height/.4 alors vous devrez utiliser la requête:

UPDATE [table_name] 
   SET `Height`=`Height`/.4 
   WHERE `DATE` <> #10/4/2013# AND `DATE` <> #10/5/2013# AND `GROUP` = "A" AND Year(`Date`) = 2012 AND Year(`Date`) = 2013

Sur MS Access, accédez à Create -> Query Design . Puis, en haut à gauche, cliquez sur Result->SQL View . Enfin, collez le motif sql ci-dessus puis revenez à Result->Design View . Je suppose que d'ici vous aurez une idée sur la façon d'utiliser la vue de conception de SQL dans Access. Note: S'il vous plaît soyez prudent en utilisant des noms de réserve comme Date .

Mise à jour: À partir de la requête ci-dessus, vous pouvez l'avoir comme sous-requête.

UPDATE (paste_the_query_above_here) 
   SET `Height`=`Height`/.4 
   WHERE `Trawl_Date` <> #10/4/2013# AND `Trawl_Date` <> #10/5/2013# AND `GROUP` = "A" AND Year(`Trawl_Date`) = 2012 AND Year(`Trawl_Date`) = 2013

Mise à jour 2: en tant que requête de sélection

SELECT 
    LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height, SAMPLE.WEIGHT_NUM/.4 AS Heigthcm
FROM 
    (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
WHERE
    TRAWL_TRIP.TRAWL_TRIP_DAT>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And TRAWL_TRIP.TRAWL_TRIP_DAT<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT]) AND TRAWL_TRIP.TRAWL_TRIP_DAT <> #10/4/2013# AND TRAWL_TRIP.TRAWL_TRIP_DAT <> #10/5/2013# AND LAKE.NAME_TXT = "A" AND Year(TRAWL_TRIP.TRAWL_TRIP_DAT) = 2012 AND Year(TRAWL_TRIP.TRAWL_TRIP_DAT) = 2013

C'est une question très novice concernant MS Access. Donc novice que je ne suis pas sûr de bien poser une question sur MS Access. Alors s'il vous plaît pardonnez toute transgression.

Dites que j'ai une base de données qui inclut les champs suivants:

  • Groupe (champ de texte, deux niveaux A et B)
  • Date (champ date, janvier 2012 à décembre 2014)
  • Année (définie comme Année: Année ([Date]))
  • Hauteur (champ numérique, centimètre)

Maintenant, la hauteur est une mesure en centimètre. Dites que quelque chose s'est mal passé avec nos mesures de hauteur et pour certaines dates et groupes, plutôt que cm, les pouces ont été entrés dans la base de données. Dites qu'il y a trop de valeurs pour les modifier pratiquement dans la base de données. Je dois donc appliquer cela en utilisant l'outil MS Access. Pour simplifier, disons que diviser une valeur de pouce par 0,4 convertira les unités en centimètres.

Les hauteurs ont été saisies à tort pour le groupe A pour toute l'année 2012 et 2013, à l'exception du 4 octobre 2013 et du 5 octobre 2013 où elles ont été correctement saisies.

Donc la question est, comment puis-je (et ma pensée était d'utiliser le champ de critères dans la vue de conception d'une requête) convertir les hauteurs de pouces en centimètres en utilisant les critères de date spécifiés ci-dessus (y compris les exceptions d'octobre)?

Même me pointer dans la bonne direction serait très utile. Je suis habitué à différents langages de programmation et cela m'a bloqué par où commencer.

Mise à jour Dans ma hâte de développer un exemple simple, j'ai omis d'essayer d'ajouter cette fonctionnalité à une requête existante. La réponse de @winghei est probablement parfaite. Cependant, il n'est pas clair pour moi de l'ajouter à mon code sql exisitng dans ma requête. Voici le code qui existe déjà:

SELECT LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height
FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));

Alors maintenant la question est, où puis-je ajouter le code de @winghei?

UPDATE 2 Je ne peux toujours pas ajouter cette requête.

SELECT LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height
    FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
    WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));

UPDATE(SELECT LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height
    FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
    WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));)
   SET `Heightcm`=`Height`/.4 
   WHERE `Trawl_Date` <> #10/4/2013# AND `Trawl_Date` <> #10/5/2013# AND `GROUP` = "A" AND Year(`Trawl_Date`) = 2012 AND Year(`Trawl_Date`) = 2013

Cela entraîne cette erreur:

Caractères trouvés après la fin de l'instruction SQL

Alors, j'ai nommé la requête ci-dessus Temp_Query , enregistré, puis essayé ceci:

UPDATE(Temp_Query)
   SET `Heightcm`=`Height`/.4 
   WHERE `Trawl_Date` <> #10/4/2013# AND `Trawl_Date` <> #10/5/2013# AND `GROUP` = "A" AND Year(`Trawl_Date`) = 2012 AND Year(`Trawl_Date`) = 2013

Cela a traité. Cependant, lorsque vous regardez cette tentative dans la vue de Heightcm données, seule une colonne Heightcm est générée alors que ce que je voudrais faire est d'ajouter la colonne modifiée à l'ensemble des données en tant que colonne.

Des idées ici?

Mise à jour 3 Publication d'une définition de table (SAMPLE) à la demande de @krish KM

Table: SAMPLE                                                                                        Page: 1



Properties

AlternateBackShade:       100                         AlternateBackThemeC       -1
AlternateBackTint:        100                         BackShade:                100
BackTint:                 100                         DatasheetForeTheme        -1

DatasheetGridlinesTh      -1                          DateCreated:              2013-02-27 8:14:59 PM
DefaultView:              2                           DisplayViewsOnShare       1
FilterOnLoad:             False                       GUID:                     {guid {9ADCA5B5-
                                                                                DCFF-49DB-BBC2-

HideNewField:             False                       LastUpdated:              2016-10-12 9:39:47 AM
NameMap:                  Long binary data            OrderByOn:                False
OrderByOnLoad:            True                        Orientation:              Left-to-Right

PublishToWeb:             1                           ReadOnlyWhenDiscon        False
RecordCount:              55907                       ThemeFontIndex:           -1
TotalsRow:                False                       Updatable:                True

Pour voir les résultats du calcul, essayez:

SELECT  
    LAKE.NAME_TXT AS [GROUP], 
    TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, 
    YEAR([TRAWL_TRIP_DAT]) AS [YEAR],
    SAMPLE.WEIGHT_NUM AS HeightIN,
    SAMPLE.WEIGHT_NUM / 0.4 AS HeightCM,
FROM 
        ((LAKE INNER JOIN 
        STATION     ON 
        LAKE.LAKE_ID = STATION.LAKE_ID INNER JOIN 
        (NET_TYPE RIGHT JOIN 
        (TRAWL_TYPE RIGHT JOIN 
        TRAWL_TRIP  ON 
        TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID)    ON 
        NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID)  ON 
        STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN 
        TRAWL   ON 
        TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID)     INNER JOIN 
        (MATURITY_TYPE RIGHT JOIN 
        (SPECIES_TYPE INNER JOIN 
        SAMPLE      ON 
        SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID)  ON 
        MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID)   ON 
        TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
WHERE 
   (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=
    Nz([Forms]![frmReport]![txtTrawlDateFrom], [TRAWL_TRIP_DAT]) AND 
    (TRAWL_TRIP.TRAWL_TRIP_DAT)<=
    Nz([Forms]![frmReport]![txtTrawlDateTo], [TRAWL_TRIP_DAT]))) and    
    TRAWL_TRIP.TRAWL_TRIP_DAT <> #10/4/2013# AND 
    TRAWL_TRIP.TRAWL_TRIP_DAT <> #10/5/2013# AND 
    LAKE.NAME_TXT = "A" AND 
    (Year(TRAWL_TRIP.TRAWL_TRIP_DAT) = 2012 or
    Year(TRAWL_TRIP.TRAWL_TRIP_DAT) = 2013)

Je ne suis pas sûr que vous voulez mettre à jour la valeur, cependant, vous pouvez stocker la valeur mise à jour dans une autre colonne au cas où quelque chose ne va pas.

Pour mettre à jour la valeur, créez une requête de mise à jour basée sur la requête ci-dessus et mettez à jour HeightIN jusqu'à la valeur HeightCM. Il peut cependant vous donner une erreur, en disant que le jeu d'enregistrements n'est pas modifiable. Si c'est le cas, vous aurez besoin du PK de votre table SAMPLE (SPECIES_TYPE_id?) Et de la nouvelle valeur que vous voulez. Vous pouvez le mettre dans une nouvelle table et ensuite le joindre avec SAMPLE et vous pourrez faire votre mise à jour.

HTH

vos critères de date vont à la fin de la clause WHERE et vous n'avez pas besoin d'une requête UPDATE séparée si vous êtes confiant dans les résultats, c'est juste plus agréable de voir les résultats avant la mise à jour, au cas où les résultats ne sont pas attendu.

Pour votre requête de mise à jour, si vous êtes satisfait des résultats de SELECT , essayez

update UpdateSampleData set HeightIN = HeightCM

mais je ne serais pas surpris si elle disait 'recordset not updateable'

Comme votre jeu d'enregistrements n'est en effet pas modifiable, vous devez modifier votre requête SELECT requête MAKE TABLE , qui placera les résultats dans une nouvelle table. Assurez-vous d'ajouter le (s) champ (s) de clé primaire du SAMPLE , cependant. Ensuite, vous devriez être en mesure de mettre à jour SAMPLE avec la valeur associée de votre nouvelle table. Ou, mieux encore, ajoutez d'abord un nouveau champ à votre table SAMPLE pour la nouvelle valeur, puis mettez à jour le nouveau champ au lieu d'écraser la valeur existante.


Tu y es presque. En supposant que votre requête d'origine de la mise à jour 1 fonctionne, vous pouvez créer une requête en la référençant et votre requête Temp_query à partir de la mise à jour 2. De cette façon, vous n'aurez pas à réécrire votre requête originale, ce qui est assez complexe. Au lieu de cela, tirez simplement dans votre colonne Heightcm. Vous pouvez le faire comme ceci, aussi longtemps que vous ajoutez votre colonne ID unique à Temp_query.

SELECT Temp_query.[Height]/.4 as Heightcm, orig_qry.[IDvar], orig_qry.[Group], orig_qry.[Trawl_Date], orig_qry.[Year], orig_qry.[Height]
    FROM orig_qry
    INNER JOIN Temp_query
    ON orig_qry.[IDvar] = Temp_query.[IDvar]

Ou cela pourrait être aussi simple que ci-dessous si vous êtes satisfait de la sortie de Temp_Query sauf le manque de Heightcm:

SELECT [Height]/.4 as Heightcm, [Group], [Trawl_Date], [Year], [Height]
FROM Temp_query