J'essaie de compter les instances regroupées par mois et par année.
Month | Year | c
Ligne d'erreur 2: '+' ne peut pas être appliqué à bigint, varchar (1)
J'ai essayé d'échanger +
pour &
& ||
pour créer la chaîne souhaitée mais je n'ai pas de chance. p>
Comment puis-je produire un tableau comme ci-dessous:
Month Year | c
Comment puis-je produire ce tableau également:
SELECT (MONTH(CAST(t1.some_date as DATE)) + ' ' + YEAR(CAST(t1.some_date as DATE))) as Issue_Month, COUNT(*) as c FROM (sub query) t1 GROUP BY (MONTH(CAST(t1.some_date as DATE)) + ' ' + YEAR(CAST(t1.some_date as DATE)))
3 Réponses :
Il semble que ce soit une façon de le faire pour obtenir un seul champ avec mois-année
. Ce n’est certainement pas la meilleure façon d’accomplir cela
CONCAT(CAST(MONTH(CAST(t1.some_date as DATE)) as Varchar(2)) , '-' , CAST(YEAR(CAST(t1.some_date as DATE)) as Varchar(4))) as Issue_Month,
vous pouvez essayer quelque chose comme ceci:
SELECT (MONTH(CAST(t1.some_date as DATE)) + ' ' + YEAR(CAST(t1.some_date as DATE))) as Issue_Month, COUNT(*) as c FROM (sub query) t1 GROUP BY (MONTH(CAST(t1.some_date as DATE)), YEAR(CAST(t1.some_date as DATE)))
La clause de regroupement n'a pas besoin de bla + bla
. Vous pouvez simplement les inclure tels qu'ils sont.
btw, parce que vous n'utilisez aucune autre table pour baser vos mois, vous n'obtiendrez que des mois avec des décomptes de mois contenant des Problèmes
. Pour résoudre ce problème, vous pouvez utiliser un autre tableau qui conserve tous les mois et toutes les données que vous souhaitez avoir pour chaque mois (jours qu'il contient, forme abrégée, trimestre annuel, jours fériés, etc.) et joindre à gauche Issue_Month
à ladite table, et GROUP BY
la table principale des mois.
Vous pouvez utiliser date_format ()
a>: SELECT
date_format(CAST(t1.some_date as DATE), '%m %Y') as Issue_Month,
COUNT(*) as c
FROM
(sub query) t1
GROUP BY
date_format(CAST(t1.some_date as DATE), '%m %Y')
Beaucoup plus intuitif et propre: testez maintenant
Que diriez-vous de commander ceci? J'ai essayé ORDER BY
la même expression mais elle est triée par mois, donc j'ai tous les janvier pour les années regroupés, puis février, et ainsi de suite.
Pourquoi ne pas formater comme % Y '% m'
au lieu de '% m% Y'
?
Cela a fonctionné même si ce n'est pas intuitif (du moins pour moi. Dans Excel / VBA, le format n'aurait pas d'importance - le tri fonctionne de la même manière). Clairement encore nouveau dans SQL. Merci d'avoir répondu aux deux questions - je sais que c'est une mauvaise pratique newb: 0
date_format () renvoie une chaîne de sorte que le tri est alphanumérique. Excel fait un format sur la couche de présentation, en conservant la valeur d'origine.
Ça a du sens. Je m'attendais à ce que date_format () renvoie une date
Si vous voulez le format MMYYYY, vous pouvez essayer ceci: GROUP BY date_format (CAST (t1.some_date as DATE), '% m% Y'), date_format (CAST (t1.some_date as DATE), '% Y% m ') ORDER BY date_format (CAST (t1.some_date comme DATE),'% Y% m ')
bien que ce ne soit pas si efficace et plus compliqué.
L'opérateur de concaténation pour Presto est
||
et non+
(je pense).Je ne sais pas ce qu'est presto, mais dans T-SQL, vous pouvez simplement regrouper par mois (…), année (…)