Se puede hacer select si?

14/01/2006 - 17:01 por Fabián | Informe spam
Hola compañeros, tengo una pregunta que a lo mejor es básica.
Pero no se como hacerla T-SQL
Sí A >2 y G>4 y P>15 entonces X=X-(A+G+P)
o
Sí A >2 y G<4 y P<15 entonces X=X-(A)
Espero que me haya explicado.
Ej.:
XR,
A=8,
P)
entonces x= 52-(6+14) y el resultado sería x2

Desde ya muchas gracias.
Fabián

Preguntas similare

Leer las respuestas

#1 Guillermo Roldán
14/01/2006 - 19:36 | Informe spam
Creo que buscas algo así:

declare @A int
declare @G int
declare @P int
declare @X int

set @A = 8
set @G = 0
set @P = 29
set @X = 52

SET @X = @X - (@A+@G+@P)

PRINT @X

Saludos,
Guillermo


"Fabián" escribió en el mensaje
news:
Hola compañeros, tengo una pregunta que a lo mejor es básica.
Pero no se como hacerla T-SQL
Sí A >2 y G>4 y P>15 entonces X=X-(A+G+P)
o
Sí A >2 y G<4 y P<15 entonces X=X-(A)
Espero que me haya explicado.
Ej.:
XR,
A=8,
P)
entonces x= 52-(6+14) y el resultado sería x2

Desde ya muchas gracias.
Fabián


Respuesta Responder a este mensaje
#2 Alejandro Mesa
14/01/2006 - 20:46 | Informe spam
Fabián,

De donde salen los valores a los que te refieres, desde una tabla o son
valores de variables?

T-SQL cuenta con una expresion muy interesante y util llamada "case".

select
case
when A > 2 and G > 4 and P > 15 then X - (A + G + P)
when A > 2 and G < 4 and P < 15 then X - A
else NULL -- que pasa si no se cumplen los criterios anteriores
end as X
from
t1
go

Si la formula referencia variables, entonces puedes una sentencia "if".

if (@A > 2 and @G > 4 and @P > 15) set @X = @X - (@A + @G + @P)
if (@A > 2 and @G < 4 and @P < 15) set @X = @X - @A


AMB


"Fabián" wrote:

Hola compañeros, tengo una pregunta que a lo mejor es básica.
Pero no se como hacerla T-SQL
Sí A >2 y G>4 y P>15 entonces X=X-(A+G+P)
o
Sí A >2 y G<4 y P<15 entonces X=X-(A)
Espero que me haya explicado.
Ej.:
XR,
A=8,
P)
entonces x= 52-(6+14) y el resultado sería x2

Desde ya muchas gracias.
Fabián


Respuesta Responder a este mensaje
#3 Fabián
14/01/2006 - 20:53 | Informe spam
Hola, estos valores salen de una misma tabla y de un mismo campo. Que es el
campo cantidad. Lo que pasa es que los valores son group by.
Por ejemplo
select a,b,sum(cantidad) AS A from tabla group by a,b having A>2
select a,b,sum(cantidad) AS g from tabla group by a,b having A>4
select a,b,sum(cantidad) AS p from tabla group by a,b having A>15
Gracias


"Alejandro Mesa" escribió:

Fabián,

De donde salen los valores a los que te refieres, desde una tabla o son
valores de variables?

T-SQL cuenta con una expresion muy interesante y util llamada "case".

select
case
when A > 2 and G > 4 and P > 15 then X - (A + G + P)
when A > 2 and G < 4 and P < 15 then X - A
else NULL -- que pasa si no se cumplen los criterios anteriores
end as X
from
t1
go

Si la formula referencia variables, entonces puedes una sentencia "if".

if (@A > 2 and @G > 4 and @P > 15) set @X = @X - (@A + @G + @P)
if (@A > 2 and @G < 4 and @P < 15) set @X = @X - @A


AMB


"Fabián" wrote:

> Hola compañeros, tengo una pregunta que a lo mejor es básica.
> Pero no se como hacerla T-SQL
> Sí A >2 y G>4 y P>15 entonces X=X-(A+G+P)
> o
> Sí A >2 y G<4 y P<15 entonces X=X-(A)
> Espero que me haya explicado.
> Ej.:
> XR,
> A=8,
> P)
> entonces x= 52-(6+14) y el resultado sería x2
>
> Desde ya muchas gracias.
> Fabián
>
>
Respuesta Responder a este mensaje
#4 Alejandro Mesa
15/01/2006 - 00:30 | Informe spam
Fabián,

Creo que mejor pones un ejemplo de la tabla, data y resultado esperado. Es
muy dificil entender lo que se quiere hacer cuando la descripcion del
problema se da de poquito en poquito.

1 -

Quien es X en todo este asunto?

2 -

Por que usas un alias igual al nombre de una columna?

select a,b,sum(cantidad) AS A from tabla group by a,b having A>2



3 -

Por que filtras en la clausula "having" y no en la clausula "where", si solo
queires ciertos valores de la columna [A]?

select a,b,sum(cantidad) AS g from tabla group by a,b having A>4
select a,b,sum(cantidad) AS p from tabla group by a,b having A>15




AMB

"Fabián" wrote:

Hola, estos valores salen de una misma tabla y de un mismo campo. Que es el
campo cantidad. Lo que pasa es que los valores son group by.
Por ejemplo
select a,b,sum(cantidad) AS A from tabla group by a,b having A>2
select a,b,sum(cantidad) AS g from tabla group by a,b having A>4
select a,b,sum(cantidad) AS p from tabla group by a,b having A>15
Gracias


"Alejandro Mesa" escribió:

> Fabián,
>
> De donde salen los valores a los que te refieres, desde una tabla o son
> valores de variables?
>
> T-SQL cuenta con una expresion muy interesante y util llamada "case".
>
> select
> case
> when A > 2 and G > 4 and P > 15 then X - (A + G + P)
> when A > 2 and G < 4 and P < 15 then X - A
> else NULL -- que pasa si no se cumplen los criterios anteriores
> end as X
> from
> t1
> go
>
> Si la formula referencia variables, entonces puedes una sentencia "if".
>
> if (@A > 2 and @G > 4 and @P > 15) set @X = @X - (@A + @G + @P)
> if (@A > 2 and @G < 4 and @P < 15) set @X = @X - @A
>
>
> AMB
>
>
> "Fabián" wrote:
>
> > Hola compañeros, tengo una pregunta que a lo mejor es básica.
> > Pero no se como hacerla T-SQL
> > Sí A >2 y G>4 y P>15 entonces X=X-(A+G+P)
> > o
> > Sí A >2 y G<4 y P<15 entonces X=X-(A)
> > Espero que me haya explicado.
> > Ej.:
> > XR,
> > A=8,
> > P)
> > entonces x= 52-(6+14) y el resultado sería x2
> >
> > Desde ya muchas gracias.
> > Fabián
> >
> >
Respuesta Responder a este mensaje
#5 Fabián
15/01/2006 - 00:43 | Informe spam
Alejandro
Este es el script de creación de la tabla y la insercion de registros de
prueba
El resultado deseado es
Año Mes Medico Cantidad P15 A2 G4 Total
2005 12 10331 23 0 6 0 17


CREATE TABLE [dbo].[RESUMEN1] (
[AÑO] [int] NULL ,
[MES] [int] NULL ,
[DIA] [int] NULL ,
[MEDICO] [varchar] (20) COLLATE SQL_Latin1_General_CP850_CI_AS NULL ,
[AFILIADO] [varchar] (30) COLLATE SQL_Latin1_General_CP850_CI_AS NULL ,
[PRACTICA] [varchar] (20) COLLATE SQL_Latin1_General_CP850_CI_AS NULL ,
[CANTIDAD] [int] NULL
) ON [PRIMARY]
GO

INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789013',1)
GO
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789013',4)
GO
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789013',11)
GO
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789013',1)
GO
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789013',1)
GO
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789013',1)
GO
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789012',1)
GO
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789012',1)
GO
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789012',1)
GO
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789012',1)
GO
SELECT
R.AÑO,R.MES,R.MEDICO
,SUM(CANTIDAD) AS CANTIDAD
,SUM(P15) AS P15
,SUM(A2) AS A2
,SUM(G4) AS G4
,TOTAL=(SUM(CANTIDAD)-SUM(P15)-SUM(A2)-SUM(G4))
FROM RESUMEN1 R
LEFT OUTER JOIN
/*
CON ESTA SUBCONSULTA DEVUELVO LOS MÉDICOS QUE HAN ATENDIDO MAS DE
15 AFILIADOS EN UN MISMO DÍA. SE TIENE QUE DEBITAR PERO TENGO QUE TENER EN
CUENTA TAMBIEN LAS DOS CONDICIONES QUE SIGUEN A CONTINUACION.
*/
(SELECT AÑO,MES,DIA,MEDICO,SUM(CANTIDAD)-15 AS P15
FROM RESUMEN1
GROUP BY AÑO,MES,DIA,MEDICO
HAVING SUM(CANTIDAD) >15)AS E
ON R.AÑO=E.AÑO AND R.MES=E.MES AND R.DIA=E.DIA AND R.MEDICO = E.MEDICO
LEFT OUTER JOIN
/*
CON ESTA SUBCONSULTA DEVUELVO LOS MÉDICOS QUE HAN ATENDIDO 2 VECES
EN UN MISMO DÍA A UN MISMO AFILIADO. ESTO SE TIENE QUE DEBITAR
*/
(SELECT AÑO,MES,DIA,MEDICO,AFILIADO,SUM(CANTIDAD)-2 AS A2
FROM RESUMEN1
GROUP BY AÑO,MES,DIA,MEDICO,AFILIADO
HAVING SUM(CANTIDAD) >2)AS C
ON
R.AÑO=C.AÑO
AND
R.MES=C.MES
AND
R.DIA=C.DIA
AND
R.MEDICO = C.MEDICO
AND
R.AFILIADO = C.AFILIADO

LEFT OUTER JOIN
/*
CON ESTA SUBCONSULTA DEVUELVO LOS MÉDICOS QUE HAN ATENDIDO MAS DE 4 VECES
A UN MISMO GRUPO FAMILIAR. ESTO SE TIENE QUE DEBITAR
*/
(SELECT AÑO,MES,DIA,MEDICO,SUBSTRING(AFILIADO,1,9)AFILIADO,SUM(CANTIDAD)-4
AS G4
FROM RESUMEN1
GROUP BY AÑO,MES,DIA,MEDICO,SUBSTRING(AFILIADO,1,9)
HAVING SUM(CANTIDAD) >4)AS D
ON
R.AÑO=D.AÑO
AND
R.MES=D.MES
AND
R.DIA=D.DIA
AND
R.MEDICO = D.MEDICO
AND
SUBSTRING(R.AFILIADO,1,9) = SUBSTRING(D.AFILIADO,1,9)

WHERE R.MEDICO331
GROUP BY R.AÑO,R.MES,R.MEDICO
ORDER BY R.MEDICO
GO

"Alejandro Mesa" escribió:

Fabián,

Creo que mejor pones un ejemplo de la tabla, data y resultado esperado. Es
muy dificil entender lo que se quiere hacer cuando la descripcion del
problema se da de poquito en poquito.

1 -

Quien es X en todo este asunto?

2 -

Por que usas un alias igual al nombre de una columna?

> select a,b,sum(cantidad) AS A from tabla group by a,b having A>2

3 -

Por que filtras en la clausula "having" y no en la clausula "where", si solo
queires ciertos valores de la columna [A]?

> select a,b,sum(cantidad) AS g from tabla group by a,b having A>4
> select a,b,sum(cantidad) AS p from tabla group by a,b having A>15


AMB

"Fabián" wrote:

> Hola, estos valores salen de una misma tabla y de un mismo campo. Que es el
> campo cantidad. Lo que pasa es que los valores son group by.
> Por ejemplo
> select a,b,sum(cantidad) AS A from tabla group by a,b having A>2
> select a,b,sum(cantidad) AS g from tabla group by a,b having A>4
> select a,b,sum(cantidad) AS p from tabla group by a,b having A>15
> Gracias
>
>
> "Alejandro Mesa" escribió:
>
> > Fabián,
> >
> > De donde salen los valores a los que te refieres, desde una tabla o son
> > valores de variables?
> >
> > T-SQL cuenta con una expresion muy interesante y util llamada "case".
> >
> > select
> > case
> > when A > 2 and G > 4 and P > 15 then X - (A + G + P)
> > when A > 2 and G < 4 and P < 15 then X - A
> > else NULL -- que pasa si no se cumplen los criterios anteriores
> > end as X
> > from
> > t1
> > go
> >
> > Si la formula referencia variables, entonces puedes una sentencia "if".
> >
> > if (@A > 2 and @G > 4 and @P > 15) set @X = @X - (@A + @G + @P)
> > if (@A > 2 and @G < 4 and @P < 15) set @X = @X - @A
> >
> >
> > AMB
> >
> >
> > "Fabián" wrote:
> >
> > > Hola compañeros, tengo una pregunta que a lo mejor es básica.
> > > Pero no se como hacerla T-SQL
> > > Sí A >2 y G>4 y P>15 entonces X=X-(A+G+P)
> > > o
> > > Sí A >2 y G<4 y P<15 entonces X=X-(A)
> > > Espero que me haya explicado.
> > > Ej.:
> > > XR,
> > > A=8,
> > > P)
> > > entonces x= 52-(6+14) y el resultado sería x2
> > >
> > > Desde ya muchas gracias.
> > > Fabián
> > >
> > >
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida