Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2008
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
Problema con Consulta

Hola amigos de clubdelphi tengo un problema con una consulta y no puedo resolverla, hay cosas de sql que aun no domino muy bien, bueno aqui va

tengo una base de datos en sql server 7 tengo una tabla llamada productos

la tabla productos tiene

nombe
cantidad
tipo_cantidad

( las cantidades de la tabla estan en gramos y en unidades)

debo construir una consulta que convierta las cantidades de productos a klogramos


cree esta consulta

Código SQL [-]
select 
        nombre,
        Cantidad,
        CantidadKG = substring(cast(cast(((Cantidad * 1)   / 1000) as real    (4)) as varchar(12)),1,3),
  
        from Productos

en donde dice (Cantidad * 1) / 1000 ese 1 corresponde a una variable que va cambiando puse el 1 como referencia, bueno con esta consulta funciona me arroja los valores que estaba en gramos en kilogramos peroooo, el problema es que en la misma tabla tengo tambien productos que son unidades y si un producto de tipo unidad pasa por esa consulta en la parte donde dice

(Cantidad * 1) / 1000 supongamos que ese 1 se cambia por 28 quedaria (Cantidad * 28) / 1000 = 0.028 ese numero no me sirve

como le digo a la consulta que cuando las cantidades sean de tipo unidades solo multiplique (Cantidad * el numero) y no haga la division por 1000??

estuve viendo algo del if y el else pero no me resulta no se como hacerlo
supongo que debe ser la consulta algo asi como

si tipo_cantidad = 'Kilos' entonces (Cantidad * 1) / 1000 ( entonces divide)
si no
(Cantidad * 1) (entonces solo multiplica)

como puedo hacer eso ayuda plis he intentado cosas pero no me resulta
Responder Con Cita
  #2  
Antiguo 24-11-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Código SQL [-]
Case when Tipo_catnidad = 'kilos' then (Cantidad * 1)   / 1000 else (Cantidad * 1)  end
__________________

Responder Con Cita
  #3  
Antiguo 24-11-2008
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
hola la solucion es genial la probe lo deje asi

Código SQL [-]
Case when Tipo_Cantidad = 'Gramos' 
        then 
        substring(cast(cast(((PP.Cantidad *  @NroPlatos)/1000) as real(4)) as varchar(12)),1,5)
      else 
         substring(cast(cast(((PP.Cantidad *  @NroPlatos)) as real(4)) as varchar(12)),1,5)
         end

y me arroja la consulta

Tipo_Cantidad
---------------
Gramos
Unidades
Gramos
Gramos

los tipos y los valores me arroja una columna sin nombre sera por el substring(cast(cast(((PP.Cantidad * @NroPlatos)) as real(4)) as varchar(12)),1,5)

la columna sin nombre arroja

-------
0.8
2
1.38
0.716

lo hace bien pero como le doy un nombre a esa columna si le pongo algo asi como

CantidadesKG = substring(cast(cast(((PP.Cantidad * @NroPlatos)) as real(4)) as varchar(12)),1,5)

me da error
Servidor: mensaje 170, nivel 15, estado 1, línea 7
Línea 7: sintaxis incorrecta cerca de '='.
Servidor: mensaje 170, nivel 15, estado 1, línea 7
Línea 7: sintaxis incorrecta cerca de 'PP'.
Servidor: mensaje 170, nivel 15, estado 1, línea 9
Línea 9: sintaxis incorrecta cerca de 'PP'.

si le quito me sale perfecto, como le doy nombre a la columna

muchas gracias por al respuesta me la resolvieron muy muy rapido

(quiero que la columna tenga nombre por que la estoy llamando desde un dbgrid en delphi)


muchas muchas gracias [ContraVeneno]

Última edición por Memo6015 fecha: 24-11-2008 a las 20:26:19.
Responder Con Cita
  #4  
Antiguo 24-11-2008
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Código SQL [-]
Case when Tipo_Cantidad = 'Gramos' 
        then 
        substring(cast(cast(((PP.Cantidad *  @NroPlatos)/1000) as real(4)) as varchar(12)),1,5)
      else 
         substring(cast(cast(((PP.Cantidad *  @NroPlatos)) as real(4)) as varchar(12)),1,5)
         end
AS CANTIDAD
Prueba a 'bautizar' la columna y dinos el resultado. En este caso debería aparecer como 'CANTIDAD'. Pon lo que quieras.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 24-11-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
En SQL Server, tienes varias formas de darle un 'alias' a tu campo:

Código SQL [-]
Select Cantidad = Case when 1 = 0 then 0 else 1 end
...
Select Case when 1 = 0 then 0 else 1 end Cantidad
...
o también:
Select Case when 1 = 0 then 0 else 1 end As Cantidad
__________________

Responder Con Cita
  #6  
Antiguo 24-11-2008
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
hola amigos muchas gracias todo perfecto
muchas gracias por la rapides con la que me ayudaron
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con consulta Nomad SQL 14 26-09-2008 20:47:55
Problema con consulta de SQL mramos65 SQL 4 23-11-2007 17:35:08
problema con consulta sql Cosgaya SQL 4 16-01-2006 18:09:17
Problema con consulta de SQL Durbed Firebird e Interbase 2 30-09-2004 21:41:39
Problema con consulta PaLaSaca Conexión con bases de datos 4 23-04-2004 00:12:25


La franja horaria es GMT +2. Ahora son las 22:31:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi