J'essaie de définir une plage saisonnière pour une date spécifique à partir de la table DTBL_SCHOOL_DATES. Vous trouverez ci-dessous ma logique qui définit les saisons dans une plage donnée en fonction de l'année et de sa région.
CASE WHEN RTRIM(dtbl_school_dates.local_school_year) = '2021-2022' THEN CASE WHEN RTRIM(dtbl_schools_ext.region) = 'Bay Area' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '08/07/2021' and '09/08/2021' THEN 'FALL' WHEN RTRIM(dtbl_schools_ext.region) = 'Bay Area' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '11/27/2021' and '12/15/2021' THEN 'WINTER' WHEN RTRIM(dtbl_schools_ext.region) = 'Bay Area' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '03/04/2022' and '03/22/2022' THEN 'SPRING' WHEN RTRIM(dtbl_schools_ext.region) = 'Central Valley' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '07/31/2021' and '09/01/2021' THEN 'FALL' WHEN RTRIM(dtbl_schools_ext.region) = 'Central Valley' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '11/27/2021' and '12/15/2021' THEN 'WINTER' WHEN RTRIM(dtbl_schools_ext.region) = 'Central Valley' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '02/19/2022' and '03/08/2022' THEN 'SPRING' WHEN RTRIM(dtbl_schools_ext.region) = 'Los Angeles' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '08/14/2021' and '09/15/2021' THEN 'FALL' WHEN RTRIM(dtbl_schools_ext.region) = 'Los Angeles' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '11/27/2021' and '12/15/2021' THEN 'WINTER' WHEN RTRIM(dtbl_schools_ext.region) = 'Los Angeles' AND CAST(dtbl_school_dates.date_value AS DATE) BETWEEN '03/04/2022' and '03/22/2022' THEN 'SPRING' ELSE 'NOT IN RANGE' END ELSE FTBL_TEST_SCORES.test_admin_period END AS "C4630"
Mais chaque fois que les dates ne se situent pas dans la plage spécifiée dans la logique, je souhaite qu'elles soient ignorées. Les valeurs AKA « hors plage » doivent être exclues. J'ai essayé d'utiliser FTBL_TEST_SCORES.test_admin_period non nul et comme aucune valeur dans la base de données n'est nulle, ils ne fonctionneront pas.
Les valeurs qui ne sont pas dans la plage doivent être exclues du résultat, comment puis-je y parvenir dans la clause Where
J'ai essayé de limiter l'utilisation d'Alias mais cela n'a pas fonctionné. Je ne sais pas s'il est possible d'attribuer une valeur à un champ spécifique dans une instruction case, comme Case when 'a' then field ='B' end
Les valeurs qui ne sont pas dans la plage doivent être exclues du résultat, comment puis-je y parvenir dans la clause Where
Sans pouvoir voir la requête complète, il est impossible de trouver la meilleuresolution. La solution la plus simple est d'ajouter le critère sous forme de clause
HAVING
:Je ne comprends pas votre format de date. S'il s'agit de requêtes MySQL, elles doivent être au format aaaa-mm-jj. On peut soutenir qu'ils devraient être dans ce format même sur SQL Server qui prend en charge des formats de date natifs ambigus.
Pourquoi sont-ils tous
RTRIM
和CAST
? Les données doivent être stockées dans le format correct et nettoyées lors de la saisie. Si cela n'est pas possible, nettoyez les données régulièrement plutôt qu'à chaque requête.Il est sage de déplacer votre
季节
移动到它们自己的表中,而不是在查询时定义它们。然后它是一个简单的连接到seasons
. J'utilise une sous-requête ici, mais j'espère que vous voyez l'idée :Vous pouvez répéter l'intégralité de l'instruction CASE dans la clause WHERE comme ceci :
Ou vous pouvez utiliser une sous-requête (ou CTE) comme celle-ci :