Sintaxis SQL...

La cuestión es que tengo esta información:
http://img25.exs.cx/img25/7893/sql2ho.jpg
El problema es que no se como hacer para que el "anomes" "200301", que seria año 2003 mes de Enero,´dejarlo/escribirlo de tal forma que se pueda ver de esta manera:
http://img62.exs.cx/img62/5711/bd9uy.jpg
Espero que se entienda =)
Gracias!

4 respuestas

Respuesta
1
Puedes ampliar un poco más la pregunta porque no entiendo lo que requieres.
ajaja, disculpa.
Mira aqui porfa http://desaweb.forosdelweb.com/showthread.php?t=272527
Ahí tengo algo idéntico a lo que te escribí y con más información. Respóndeme aquí si quieres (si no estas registrado, como quieras)
Sorry! :D
Je je... gracias, pero me gustaría que leyeras entero el post. Si lo hubieses echo te habrías dado cuenta que SI me metí a esa página y que SI trate de modificar el código y también postie porque no me funcionaba. >_<
Ahora que sabes cual es mi problema... ¿sabes cómo lo puedo solucionar? ¿Existe alguna otra forma que no sea la de esa página de Microsoft? ¿O es la única solución para SQL 7?
Vi, la liga y las respuestas de la misma, también tiene esta liga:
http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art196.asp
Ya la revisaste, tiene un buen código para lo que preguntas.
El problema que vi en la página es la confusión de la forma de implementación de un cursor, si quieres aprender más de cursores sería bueno que bajes los libros de ayuda de sql server que los localizas en la página de http://www.microsoft.com/downloads buscando en sql server.
Además, de la liga que te copie revisaste completamente el código sql que proporciona microsoft, con el puedes solventar tu problema.
¿Entonces la solución seria aprender a hacer cursores?
Si es así entonces estoy más menos bien encaminado. Revisa la pagina denuevo (http://desaweb.forosdelweb.com/showthread.php?t=272527), la cual, jeje se esta transformando en un diario de vida y ahi describo el ultimo problema que tengo. ¿Qué puede ser?
mmm... no te entendí en que me equivoque :S
Yo se que el fetch (y por "default" fetch next) recorre los elementos que uno le da en el select, pero ese ejemplo que tengo en ese post lo saque directamente del manual de SQL 7.
No entiendo porque no funciona
Si, tienes que aprender, el cursor es un recorrido de elementos o registros que se regresan en un select inicial y se aplican en búsquedas de estos elementos y tratamiento de la información, delete, update, insert, u otro cálculo.
El fetch es cuando le indicas al cursor que siga con el siguiente elemento. Y nunca se revuelve la instrucción del select con el fetch.
Ok, te doy el mismo que sale al final de la página que te di:
---
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName FROM Northwind.dbo.Employees
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
---
Como te digo. Lo que tengo es lo mismo que eso, solo que en otra base y no consigo que me funcione... ¿tal vez sea un problema de configuración?
No, no es problema de configuración, es problema de programación, no sé de donde sacaste el código que comente que esta mal, estas revolviendo el cursor con el select.
Checa el siguiente ejemplo:
Ejemplos
Este ejemplo abre un cursor y busca todas sus filas.
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM Northwind.dbo.Employees
WHERE LastName like 'B%'
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
Véase también
Con este debes de poder trabajar de acuerdo a como piensas y requieres, esta tomado de los libros de ayuda de sql server.
Pega todo el código de lo que haces para ver en que tienes problemas.
Uf... ¿no tenemos LO MISMO?
Que estoy revolviendo el cursor con el SELECT?
Pero si escribiste lo mismo! o_o
La única diferencia es que escribiste un WHERE que es opcional y diste otros "enter".
Y ok, ya lo probé. ¿Qué paso? Obviamente que no me funciono y me sigue tirando SOLO 1 fila.
No entiendo porque mierda pasa. Ya me han contestado 3 personas (tu, un compañero por mail y otro de un foro) y sigo y sigo dando vueltas...
Insisto: ¿No puede ser un problema de configuración?...
¡ No se porque no me funciona !
Debe de funcionar, chequeaste cuantos registros contiene la tabla de la que se esta obteniendo la información, tal vez el problema sea con los datos y no con el cursor.
Como he dicho en mis frases celebres:
Suele suceder cuando sucede.
Así es esto de la programación.
Cerremos esta serie y comencemos otra, ya que esta viene desde el 20 de febrero.
Respuesta
1
Podrías decirme si tu BD es Oracle, porque si es así lo que puedes hacer es utilizar un query más o menos así:
SELECT /*+ ALL_ROWS*/ unidad, producto, año,
SUM( decode(month, 1, SALES, 0 )) enero, SUM( decode(month, 2, SALES, 0 )) febrero,
SUM( decode(month, 3, SALES, 0 )), SUM( decode(month, 4, SALES, 0 )),
SUM( decode(month, 5, SALES, 0 )), SUM( decode(month, 6, SALES, 0 )),
SUM( decode(month, 7, SALES, 0 )), SUM( decode(month, 8, SALES, 0 )),
SUM( decode(month, 9, SALES, 0 )), SUM( decode(month, 10, SALES, 0 )),
SUM( decode(month, 11, SALES, 0 )), SUM( decode(month, 12, SALES, 0 ))
FROM tabla
WHERE año = 2000
GROUP BY unidad, producto;
Lo unico que tienes que extraer es el mes y el año para poder hacerlo.
Gracias por la respuesta, pero estoy utilizando SQL SERVER 7.
conoces algun query para sql? =)
Te soy sincero, no conozco algo para SQL Server que funcione igual pero te puedo pasar un truco:
Puedes hacer algo como esto
select sum(c1),sum(c2),
sum(c3),sum(c4)
from
(select 1 c1,0 c2,0 c3,0 c4
from tabla
union
select 0,1,0,0
from tabla
union
select 0,0,1,0
from tabla
union
select 0,0,0,1
from tabla);
Esto también debería funcionar en SQL Server.
Espero te sirva amigo y espero me hayas captado la idea, la onda es separar los resultados por columnas y ya luego sumarlas para obtener los resultados por linea.
Respuesta
Muchono se entiende, ¿creo qué quieres formatear el campo ANOMES y separarlo del resto para poner 2003 Y 01 o algo así?
Pues eso lo haces con el Substring del campo, osea
SELECT SUBSTRING (ANOMES,1,4) MES, SUBSTRING(ANOMES,4,2) AÑO y así tienes los dos campos.
No se si es eso lo que intentas.
jaja no, no se entendio =D
Me estuve informando y leí que necesito hacer algo llamado "referencias cruzadas", pero en SQL Server 7 no me reconoce ni el comando "TRANSFORM" ni el "PIVOT" así que no ahora si que no se como lo podría hacer. Entonces leí que se tenia que hacer con TSQL pero no se lo que es eso.
No quiero dividir la fecha, aunque gracias ahora se algo más =)
Lo que quiero es que me salga... bueno, lo que te mostré en la foto 2, por decirlo asi; quiero que me salgan los meses y los resultados de SQL hacia "el lado" no hacia "abajo". Osea, una columna con ENERO y los valores de 200301, otra con FEBRERO y los valores de 200302 y así sucesivamente.
Ahora si? =D
Umm sí más o menos, entonces lo que se me ocurre es o que crees vistas y que le pases el mes como parámetro, o que construyas las vistas directamente en la query:
SELECT mes_1.*,mes_2.* FROM
(SELECT * FROM TABLA WHERE MES=1) MES_1,
(SELECT * FROM TABLA WHERE MES=2) MES_2,
(SELECT * FROM TABLA WHERE MES=3) MES_3
Cada query entre paréntesis se comporta com una vista.
Suerte.
Respuesta
-1
Lee bien tu pregunta porque no entiendo que es lo que estas pidiendo.
je je... disculpa
Mira aqui porfa http://desaweb.forosdelweb.com/showthread.php?t=272527
Ahí tengo algo idéntico a lo que te escribí y con más información. Respóndeme aquí si quieres, o en la página como quieras
Sorry! :D
Hacele un SUBSTRING(expresión, inicio, fin)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas