Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problemas con un CASE en SQL Server

Estas en el tema de Problemas con un CASE en SQL Server en el foro de SQL Server en Foros del Web. Buen dia, Espero alguien pueda orientarme con este problema que tengo Estoy haciendo un DTS en SQL Server, primero opte por crear mi query desde ...
  #1 (permalink)  
Antiguo 13/11/2008, 13:40
 
Fecha de Ingreso: agosto-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Problemas con un CASE en SQL Server

Buen dia,

Espero alguien pueda orientarme con este problema que tengo

Estoy haciendo un DTS en SQL Server, primero opte por crear mi query desde el Management Studio donde tengo mi Select y dentro del Select un Case y el resultado del Select debo insertarlo en una tabla, bueno el problema esta en que en el CASE tengo que validar (de acuerdo al mes en que estemos) que por ejemplo hoy dia estamos en el mes de Noviembre pues en la tabla donde voy a insertar me coloque campos desde Enero hasta Noviembre y asi sucesivamente para el mes de Diciembre (Enero a Diciembre), pero no me deja no se si estoy haciendo algo mal, espero me puedan ayudar y ojala me haya explicado bien, de todo modos les pego un pedazo de mi query para ver si encuentran algo


INSERT INTO NUEVOMUNDO_PASO.dbo.MES
SELECT
CASE WHEN MONTH(GETDATE()) = 1 THEN A.METROS_QUINCENAL +', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0'
WHEN MONTH(GETDATE()) = 2 THEN A.METROS_QUINCENAL ',' A.METROS_QUINCENAL +', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0'
END
FROM NUEVOMUNDO_PASO.dbo.VW_FamiliasAcabados A

Nota. Los campos son numericos, por si le sirve de algo y me marca un error de
Error converting data type varchar to numeric.

Saludos y Muchas Gracias
  #2 (permalink)  
Antiguo 13/11/2008, 13:49
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problemas con un CASE en SQL Server

No se entiende bien tu select..

ahi solo estas insertando un solo campo tipo caracter..

podrias poner la estructura de tu tabla mes y que datos quieres ingresar (un ejemplo)...

Código:
INSERT INTO NUEVOMUNDO_PASO.dbo.MES
SELECT CASE MONTH(GETDATE()) 
            WHEN 1 THEN A.METROS_QUINCENAL +', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0'
            WHEN 2 THEN A.METROS_QUINCENAL  + ',' +  A.METROS_QUINCENAL + ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0'
       END
FROM NUEVOMUNDO_PASO.dbo.VW_FamiliasAcabados A
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 13/11/2008, 16:25
 
Fecha de Ingreso: agosto-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problemas con un CASE en SQL Server

Ok, la estructura de mi tabla MES son 12 campos de Enero a Diciembre y son numericos, por ejemplo lo que quiero insertar es los siguiente.
Hoy que estamos en Noviembre debo insertar datos asi:

Enero Febrero Marzo Abril Mayo Junio
31879.82 31879.82 21620.96 25278.56 10067.31 18065.45

Julio Agosto Septiembre Octubre Noviembre Diciembre
58573.34 32350.36 19863.79 11406.23 8815.23 0


Pero cuando estmos en el mes de Diciembre tengo insertar datos en todos los meses, y para el mes de Enero nadamas seria insertar en ese mes y asi sucesivamente. no se s este bien my query y gracias por tomarte la moslestia en contestarme.

Saludos
  #4 (permalink)  
Antiguo 13/11/2008, 22:05
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problemas con un CASE en SQL Server

Ok, no se cuales son los campos que te regresa la vista, pero seria el select podria ser algo como esto...

Código:
INSERT INTO NUEVOMUNDO_PASO.dbo.MES
SELECT Case When MONTH(GETDATE()) >= 1   Then   A.[CampoEnero]      Else 0 End Enero, 
       Case When MONTH(GETDATE()) >= 2   Then   A.[CampoFebrero]    Else 0 End Febrero, 
       Case When MONTH(GETDATE()) >= 3   Then   A.[CampoMarzo]      Else 0 End Marzo,
       Case When MONTH(GETDATE()) >= 4   Then   A.[CampoAbril]      Else 0 End Abril,
       Case When MONTH(GETDATE()) >= 5   Then   A.[CampoMayo]       Else 0 End Mayo,
       Case When MONTH(GETDATE()) >= 6   Then   A.[CampoJunio]      Else 0 End Junio,
       Case When MONTH(GETDATE()) >= 7   Then   A.[CampoJulio]      Else 0 End Julio,
       Case When MONTH(GETDATE()) >= 8   Then   A.[CampoAgosto]     Else 0 End Agosto,
       Case When MONTH(GETDATE()) >= 9   Then   A.[CampoSeptiembre] Else 0 End Septiembre,
       Case When MONTH(GETDATE()) >= 10  Then   A.[CampoOctubre]    Else 0 End Octubre,
       Case When MONTH(GETDATE()) >= 11  Then   A.[CampoNoviembre]  Else 0 End Noviembre,
       Case When MONTH(GETDATE())  = 12  Then   A.[CampoDiciembre]  Else 0 End Diciembre
FROM NUEVOMUNDO_PASO.dbo.VW_FamiliasAcabados A
saludos !
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 14/11/2008, 10:53
 
Fecha de Ingreso: agosto-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problemas con un CASE en SQL Server

mmmm creo que no me he dado a explicar por completo Andres95, pero muchas gracias por contestar, espero que esta vez me explique mejor.
Mira mi query lo que debe hacer es que dependiendo del mes en que nos encontremos por eso lo del Month(Getdate()), debe ir a insertar a la tabla que se llama Mes todos los meses hasta el mes en que me haya regresado el Month(Getdate()), es decir si hoy que estamos en el mes de Noviembre debo ir a escribir en la tabla Mes datos en la columna de Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre y Noviembre, pero en el mes de diciembre debo colocar un 0, y para el proximo mes que estemos en Diciembre debo ir a escribir datos en Todos los meses de la tabla Mes (Enero - Diciembre), mi query completo seria:

INSERT INTO NUEVOMUNDO_PASO.dbo.MES
SELECT
CASE WHEN MONTH(GETDATE()) = 1 THEN A.METROS_QUINCENAL +', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0'
WHEN MONTH(GETDATE()) = 2 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0'
WHEN MONTH(GETDATE()) = 3 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0, 0, 0, 0, 0, 0, 0, 0, 0'
WHEN MONTH(GETDATE()) = 4 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0, 0, 0, 0, 0, 0, 0, 0'
WHEN MONTH(GETDATE()) = 5 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0, 0, 0, 0, 0, 0, 0'
WHEN MONTH(GETDATE()) = 6 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0, 0, 0, 0, 0, 0'
WHEN MONTH(GETDATE()) = 7 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0, 0, 0, 0, 0'
WHEN MONTH(GETDATE()) = 8 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0, 0, 0, 0'
WHEN MONTH(GETDATE()) = 9 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0, 0, 0'
WHEN MONTH(GETDATE()) = 10 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0, 0'
WHEN MONTH(GETDATE()) = 11 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', 0'
WHEN MONTH(GETDATE()) = 12 THEN A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL +', '+ A.METROS_QUINCENAL
END
FROM NUEVOMUNDO_PASO.dbo.VW_FamiliasAcabados A

Yo solo coloque anteriormente una parte del query, porque pense que con eso podria solucionar lo demas pero yo creo que asi me explicare mejor, y la vista tiene nadamas el campo Metros_quincenal, espero me puedas entender mejor y gracias de nuevo.

Saludos
  #6 (permalink)  
Antiguo 14/11/2008, 16:23
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problemas con un CASE en SQL Server

ok, este no te sirve?

es que como tu lo tienes solo insertaria un solo campo y si la tabla tiene uno por cada mes, entonces debes seleccionar un valor por cada mes y no concatenarlos...

Código:
SELECT Case When MONTH(GETDATE()) >= 1   Then   A.[METROS_QUINCENAL]  Else 0 End Enero, 
       Case When MONTH(GETDATE()) >= 2   Then   A.[METROS_QUINCENAL]  Else 0 End Febrero, 
       Case When MONTH(GETDATE()) >= 3   Then   A.[METROS_QUINCENAL]  Else 0 End Marzo,
       Case When MONTH(GETDATE()) >= 4   Then   A.[METROS_QUINCENAL]  Else 0 End Abril,
       Case When MONTH(GETDATE()) >= 5   Then   A.[METROS_QUINCENAL]  Else 0 End Mayo,
       Case When MONTH(GETDATE()) >= 6   Then   A.[METROS_QUINCENAL]  Else 0 End Junio,
       Case When MONTH(GETDATE()) >= 7   Then   A.[METROS_QUINCENAL]  Else 0 End Julio,
       Case When MONTH(GETDATE()) >= 8   Then   A.[METROS_QUINCENAL]  Else 0 End Agosto,
       Case When MONTH(GETDATE()) >= 9   Then   A.[METROS_QUINCENAL]  Else 0 End Septiembre,
       Case When MONTH(GETDATE()) >= 10  Then   A.[METROS_QUINCENAL]  Else 0 End Octubre,
       Case When MONTH(GETDATE()) >= 11  Then   A.[METROS_QUINCENAL]  Else 0 End Noviembre,
       Case When MONTH(GETDATE())  = 12  Then   A.[METROS_QUINCENAL]  Else 0 End Diciembre
FROM NUEVOMUNDO_PASO.dbo.VW_FamiliasAcabados A

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:23.