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

#16 Fabián
16/01/2006 - 23:03 | Informe spam
Alejandro,
ante todo muchas gracias.
Te comento que el resultado es incorrecto a la hora de calcular G4
año Mes dia medico Cantidad a2
g4 Total
2005 12 1 10331 25 6 10 9

El resultado debería ser
año Mes dia medico Cantidad a2
g4 Total
2005 12 1 10331 25 6 4 15
Por que para el mismo grupo familiar mes el valor de A2
quedaría
MEDICO GRUPO AFILIADO TOTAL A2 G4
10331 123456780 123456780001 1 0 0
10331 123456781 123456781001 1 0 0
10331 123456782 123456782001 1 0 0
10331 123456783 123456783001 1 0 0
10331 123456784 123456784001 1 0 0
10331 123456785 123456785001 1 0 0
10331 123456786 123456786001 1 0 0
10331 123456787 123456787001 1 0 0
10331 123456788 123456788001 1 0 0
10331 123456788 123456788002 1 0 0
10331 123456788 123456788003 1 0 0
10331 123456789 123456789012 4 2 2
10331 123456789 123456789013 6 4 2
10331 123456789 123456789014 1 0 0
10331 123456789 123456789015 1 0 0
25 6 4
y el resultado sería 15
Si se inserta un registro nuevo con un número de afiliado distinto a lo que
esta en el script.
Se cumpliria el tercer criterio. Y habría que restarle uno
MEDICO GRUPO AFILIADO TOTAL A2 G4 P15
10331 123456780 123456780001 1 0 0 0
10331 123456781 123456781001 1 0 0 0
10331 123456782 123456782001 1 0 0 0
10331 123456783 123456783001 1 0 0 0
10331 123456784 123456784001 1 0 0 0
10331 123456785 123456785001 1 0 0 0
10331 123456786 123456786001 1 0 0 0
10331 123456787 123456787001 1 0 0 0
10331 123456788 123456788001 1 0 0 0
10331 123456788 123456788002 1 0 0 0
10331 123456788 123456788003 1 0 0 0
10331 123456789 123456789012 4 2 2 0
10331 123456789 123456789013 6 4 2 0
10331 123456789 123456789014 1 0 0 0
10331 123456789 123456789015 1 0 0 0
10331 223456789223456789015 1 0 0 1

26 6 4 1
El tercer criterio si se inserta un nuevo registro con un número de afiliado
distinto a los que ya hay. Se cumple por que al hacer el count de los
afiliados da mayor a 15 entonces en este caso se tiene que restar 1.
Muchas gracias
Fabián

"Alejandro Mesa" escribió:

Fabián,

Trabajemos sobre este ejemplo. Dime si el resultado de la select final esta
o no correcto. En caso de no estar correcto, danos una breve descripcion de
lo que pasa.
Trata de agregarle mas filas para probar con mas dias. Tambien dime como
seria para calcular P15 y restarlo del total.

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

set nocount off
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)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789014',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789015',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789016',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456789017',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456788001',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456788002',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456788003',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456787001',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456786001',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456785001',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456784001',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456783001',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456782001',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456781001',1)
INSERT INTO RESUMEN1 (AÑO,MES,DIA,MEDICO,AFILIADO,CANTIDAD) VALUES
(2005,12,1,'10331','123456780001',1)
GO

set nocount off
go

create view a2
as
select
AÑO,MES,DIA,MEDICO,AFILIADO,
count(*) as cantidad,
case when count(*) > 2 then count(*) - 2 else 0 end as cantidad_no_valida
from
RESUMEN1
group by
AÑO,MES,DIA,MEDICO,AFILIADO
go

create view g4
as
select
AÑO,MES,DIA,MEDICO,left(AFILIADO, 9) as grupo,
count(*) as cantidad,
case when count(*) > 4 then count(*) - 4 else 0 end as cantidad_no_valida
from
RESUMEN1
group by
AÑO,MES,DIA,MEDICO,left(AFILIADO, 9)
go

create view v1
as
select
AÑO,MES,DIA,MEDICO,
count(*) as cantidad
from
RESUMEN1
group by
AÑO,MES,DIA,MEDICO
go

select * from a2
select * from g4

select
v1.*,
t2.a2_cantidad_no_valida,
t3.g4_cantidad_no_valida,
v1.cantidad - t2.a2_cantidad_no_valida - t3.g4_cantidad_no_valida as total
from
v1
inner join
(
select
AÑO,MES,DIA,MEDICO,
sum(cantidad_no_valida) as a2_cantidad_no_valida
from
a2
group by
AÑO,MES,DIA,MEDICO
) as t2
on v1.AÑO = t2.AÑO
and v1.MES = t2.MES
and v1.DIA = t2.DIA
and v1.MEDICO = t2.MEDICO
inner join
(
select
AÑO,MES,DIA,MEDICO,
sum(cantidad_no_valida) as g4_cantidad_no_valida
from
g4
group by
AÑO,MES,DIA,MEDICO
) as t3
on v1.AÑO = t3.AÑO
and v1.MES = t3.MES
and v1.DIA = t3.DIA
and v1.MEDICO = t3.MEDICO
go

drop view v1, a2, g4
go


AMB


"Fabián" wrote:

> Alejandro,
> Tomando como base la data que pase en el primer script.
> La explicación es de esta manera.
> > > Los dos primeros criterios tienen en cuenta a los afiliados, y el tercer
> > > criterio tiene en cuenta al medico.
> > >
> > > Si el count(cantidad) >2 para un mismo dia,médico y afiliado entonces le
> > > resto 2
>
> Ej.:
> Estos datos son del mismo grupo de afiliados
>
> select año,mes,dia,medico,afiliado,count(*)count_cantidad from resumen1
> group by año,mes,dia,afiliado
> año mes dia medico afiliado
> count_cantidad
> 2005 12 1 10331 123456789012 4
> 2005 12 1 10331 123456789013 6
>
> Aplicando el primer criterio que dice que un médico, no debe atender mas de
> dos veces el mismo dia al mismo paciente.
> Tengo que restarle 2 al primer registro y 4 al segundo registro.
> Quedando de esta manera
> año mes dia afiliado
> count_cantidad
> 2005 12 1 123456789012 2
> 2005 12 1 123456789013 2
>
> > > A este set de datos que se devolvio despues de aplicarle el primer criterio .
> > > Le tengo que preguntar si count_cantidad >4
> > > Estos datos son del mismo grupo de afiliados
> En este caso la respuesta es negativa por que tengo
> año mes dia afiliado
> count_cantidad
> 2005 12 1 123456789012 2
> 2005 12 1 123456789013 2
> Es decir que el count_cantidad no es >4 entonces no le tengo que restar nada.
> Y ahí terminan las operaciones de suma y resta.
>
> El tercer criterio es que el select año,mes,dia,medico,count(cantidad) from
> resumen1 group by año,mes,dia,medico having count(cantidad) > 15
> No se cumple por que no es mayor a 15
> > > Despues de haber restado los que son >2 y >4
> > > El resultado final deseado es
> > > 10-6-0=4
> > > día médico count_cantidad
> > > 1 10331 4
>
> Gracias
> Fabián
> "Alejandro Mesa" escribió:
>
> > Fabián,
> >
> > crees que pudieras dar la misma explicacion usando la data que posteastes en
> > el primer script, donde aparece la definicion de la tabla?
> >
> >
> > AMB
> >
> > "Fabián" wrote:
> >
> > > Alejandro,
> > > Muchas gracias por todo lo que has intentado y tu ayuda es invalorable. Te
> > > pido disculpas por no haberme podido explicarme mejor.
> > >
> > > Ya veré como se puede hacer, si es que es factible.
> > >
> > > En realidad lo que tengo que obtener es encadenar los criterios.
> > >
> > > Los dos primeros criterios tienen en cuenta a los afiliados, y el tercer
> > > criterio tiene en cuenta al medico.
> > >
> > > Si el count(cantidad) >2 para un mismo dia,médico y afiliado entonces le
> > > resto 2
> > > Ej.:
> > > Estos datos son del mismo grupo de afiliados
> > >
> > > Día Medico Afiliado Count_Cantidad
> > > 1 1 110 1
> > > 1 1 110 1
> > > 1 1 110 1
> > > 1 1 111 1
> > > 1 1 112 1
> > > 1 1 113 1
> > > 1 1 114 1
> > >
> > > Como el count_Cantidad para el afiliado 110 es mayor a 2 tengo que dejar la
> > > diferencia.
> > > Día Medico Afiliado Count_Cantidad
> > > 1 1 110 1
> > > 1 1 111 1
> > > 1 1 112 1
> > > 1 1 113 1
> > > 1 1 114 1
> > >
> > > A este set de datos que se devolvio despues de aplicarle el primer criterio .
> > > Le tengo que preguntar si count_cantidad >4
> > > Estos datos son del mismo grupo de afiliados
> > > En este caso la respuesta es afirmativa por que tengo
> > >
> > > Día Medico Afiliado Count_Cantidad
> > > 1 1 110 1
> > > 1 1 111 1
> > > 1 1 112 1
> > > 1 1 113 1
> > > 1 1 114 1
> > >
> > > Esto lo tengo que tengo que restarle por que el el count de la cantidad para
> > > el mismo grupo es mayor a 4
> > >
> > > Día Medico Count_Cantidad
> > > 1 1 1
> > >
> > > Despues de haber restado los que son >2 y >4
> > > El resultado final deseado es
> > > 7-2-1=4
> > > día médico count_cantidad
> > > 1 1 4
> > > Desde ya muchas gracias
> > > Fabián
> > > "Alejandro Mesa" escribió:
> > >
> > > > Fabián,
> > > >
> > > > Me rindo. Si pudieras explicarlo paso a paso con la data de ejemplo creo me
> > > > ayudaria a tener una mejor idea.
> > > >
> > > >
> > > > AMB
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida