Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Problema con Consulta (https://www.clubdelphi.com/foros/showthread.php?t=61846)

Memo6015 24-11-2008 19:12:44

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

ContraVeneno 24-11-2008 19:17:31

Código SQL [-]
Case when Tipo_catnidad = 'kilos' then (Cantidad * 1)   / 1000 else (Cantidad * 1)  end

Memo6015 24-11-2008 20:14:17

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]

fjcg02 24-11-2008 23:14:01

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

ContraVeneno 24-11-2008 23:27:52

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

Memo6015 24-11-2008 23:39:52

hola amigos muchas gracias todo perfecto
muchas gracias por la rapides con la que me ayudaron


La franja horaria es GMT +2. Ahora son las 19:07:48.

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