Discussion:
Consulta SQL ODBC: función YEAR en un Group By?
(demasiado antiguo para responder)
Juan Guillermo Fernández V.
2004-05-07 14:11:48 UTC
Permalink
Hola gente de mundo....

Necesito, una vez más, de la infinita sabiduría de el ciberdespacio, que
siempre han sido tan generosos en prodigarme.

Ocurre que me encuentro migrando unas bases de datos desde Visual FoxPro a
MySQL, en un proceso que debe repetirse automágicamente todas las noches asi
que no es "evento de una sola vez", como pa' que me sugieran soluciones
manuales alternativas....

La cosa es que estoy haciendo, vía ODB, el siguiente QUERY:

'SELECT cod_art, fecha AS mesyso, cantidad, tipodoc,
IIf(tipodoc=10,(-1 * cantidad),cantidad) AS cantidad2,
Year(fecha) AS ano, Month(fecha) AS mes
FROM docu_db LEFT JOIN docde_db ON numreg = numrecor

GROUP BY cod_art, Year(fecha), Month(fecha)
HAVING (tipodoc=8)
OR (tipodoc=10);

Sin embargo, el sistema me responde -en su infinita sabiduría- que:

SQL error: [Microsoft][ODBC Visual FoxPro Driver]
SQL: Column 'COD_ART' is not found., SQL state S0022 in SQLExecDirect

Ahora, si remuevo las clausulas Year(fecha), Month(fecha), o las reemplazo
por una columna propiamente tal (como fecha a secas) funciona bonito. Pero
si las "ALIASo", o sea, las llamo (en el Group By) como Year(fecha) AS ano,
Month(fecha) AS mes, me retorna un hermoso:

SQL error: [Microsoft][ODBC Visual FoxPro Driver]
Command contains unrecognized phrase/keyword., SQL state 37000 in
SQLExecDirect

La cosa es que necesito agrupar los resultados de esa forma: cod_art, Año y
Mes, en ese orden; y Año y Mes deben ser extraídos de la columna fecha.

¿Alguna idea de cómo meter estas funciones en el group by ofrecido por SQL
ODBC?

Otros problemas adicionales que tengo son:

Debo convertir una fecha '2004-05-07' en '2004-05-01'. Lo habría hecho
Year(fecha)+Month(fecha)+'01'; pero no consigo encontrar el concatenador de
Strings pa' este SQL. Sólo me topé con el engorroso concat(str1,str2), que
debería anidar horriblemente pa' conseguir el mismo efecto, y aún así no me
funciona :S

¿Alguna alternativa?

Y por último, ¿cuál sería, para los entendidos, el cófigo para:

-Crear tablas temporales
-Hacer subqueries

Sólo eso. Muchas gracias a quien pueda ofreecerme una tablita.... pa' este
naufrago... con el jefe al hombro :S

¡Gracias!
Juan Jose Juarez De La Cruz
2020-11-12 05:47:45 UTC
Permalink
La fecha '2004-05-07' la puedes convertir en '2004-05-01' con lo siguiente:

SELECT
CONCAT(LEFT('2004-05-07', 8), '01') AS 'nuevaFecha';

Loading...