UTNianos

Versión completa: Final de Gestion 16-02-2016
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
[Imagen: deoep2.jpg]
Si podes copate y subilo mejor
(19-02-2016 18:12)alelnro1 escribió: [ -> ]Si podes copate y subilo mejor

Ahi lo pude subir bien.
Ejercicio 3B.
Lo probe en SQL server con un conjunto pequeño de registros. Espero sus comentarios.

/* Solucion 1 */
select i.ite_codproducto, i2.ite_codproducto from item i join item i2 on i.ite_facnumero = i2.ite_facnumero and i.ite_id > i2.ite_id group by i.ite_codproducto, i2.ite_codproducto having count(*) > 500;

/* Solucion 2 */
select i.ite_codproducto, i2.ite_codproducto from item i,item i2 where i.ite_facnumero = i2.ite_facnumero and i.ite_id > i2.ite_id group by i.ite_codproducto, i2.ite_codproducto having count(*) > 500;

/* Solucion 3A */ /* Nose si estara bien, seria solo para el insert. Espero sus comentarios */
create trigger validaciones on factura
after insert, update
as
begin
declare @facturanum int, @fecha datetime, @importe int
declare curValidar cursor for
select fac_numero, fac_fecha, fac_importe from inserted
open curValidar into @facturanum, @fecha, @importe
while (@@fetch_status=0)
begin
if (select 1 from factura where not exists ( select * from item where ite_facnumero = @facturanum))
begin
insert into factura (fac_numero, fac_fecha, fac_importe)
values (@facturanum, @fecha, @importe)
end
else
begin
raiserror ('La factura ya existe')
rollback transaction
end
end
close curValidar
deallocate curValidar
end
Buenas Probe tus soluciones pero no me dan todos los resultados, probe tambien con un distinto en lugar de mayor, pero me da los resultados dobles.

Les dejo por si quieren probar, todavia no me salio sin duplicados:

drop table item;
drop table factura;
drop table cliente;
create table cliente ( clie_codigo int PRIMARY KEY , nombre varchar(10));

insert into cliente values (1, 'carlos');
insert into cliente values (2, 'carlos2');
insert into cliente values (3, 'carlos3');
insert into cliente values (4, 'carlos4');
insert into cliente values (6, 'carlos6');

create table factura ( fac_numero int PRIMARY KEY , fac_estado varchar(10),
fac_importe int,clie_codigo int FOREIGN KEY references cliente(clie_codigo));

insert into factura values (1, 'carlos',1500,1);
insert into factura values (2, 'carlos2',1500,1);
insert into factura values (3, 'carlos3',45,2);
insert into factura values (4, 'carlos4',34,2);
insert into factura values (5, 'carlos4',34,1);
insert into factura values (6, 'carlos6',56,6);

create table item ( ite_id int PRIMARY KEY , ite_cod_producto int,
ite_cantidad int,fac_numero int FOREIGN KEY references factura(fac_numero));
--El item 1 esta en la misma factura que 2,4,5 y 6 (Factura 1)
insert into item values (1, 1,112,1);
insert into item values (2, 2,123,1);
insert into item values (9, 4,334,1);
insert into item values (7, 5,523,1);
insert into item values (5, 6,512,1);
--El item 3 esta en la misma factura que 12,11,4,5,8,9 y7 (Factura 2 )
insert into item values (11, 11,112,2);
insert into item values (12, 12,123,2);
insert into item values (19, 4,334,2);
insert into item values (17, 5,523,2);
insert into item values (15, 7,512,2);
insert into item values (13, 3,245,2);
insert into item values (14, 8,234,2);
--El item 1 esta en la misma factura que 4,5 y 6 (factura 3)
-- Tambien compartian item 1 en la Factura 1 los items 4,5 y 6
-- 4 y 5 compartian item 3 en la factura 2
insert into item values (10, 4,556,6);
insert into item values (16, 5,656,6);
insert into item values (6, 6,656,6);
insert into item values (20, 1,556,6);
insert into item values (18, 3,345,6);



y el select que estoy realizando es :

select i.ite_cod_producto, i2.ite_cod_producto
from item i join item i2 on i.fac_numero = i2.fac_numero and i.ite_id <> i2.ite_id
group by i.ite_cod_producto, i2.ite_cod_producto having count(*) > 1
order by 1,2;

Creo que sería así:


select i1.ite_codproducto, i2.ite_codproducto
from Item i1
join Item i2 on i1_ite_facnumero = i2_ite_facnumero
AND i1.ite_codproducto > i2.ite_codproducto
group by i1.ite_codproducto, i2.ite_codproducto
having count(distinct i1.ite_facnumero) > 500

La consulta de Drums està correcta.

Pasada en limpio para que la puedan copiar y correr sería:




SELECT I.ite_cod_producto, I_2.ite_cod_producto FROM ITEM I
INNER JOIN ITEM I_2
ON I.fac_numero = I_2.fac_numero
AND I.ite_cod_producto < I_2.ite_cod_producto
GROUP BY I.ite_cod_producto, I_2.ite_cod_producto
HAVING COUNT(DISTINCT I.FAC_NUMERO) > 500
ORDER BY 1


(23-02-2016 13:50)Martin. escribió: [ -> ]La consulta de Drums està correcta.

Pasada en limpio para que la puedan copiar y correr sería:




SELECT I.ite_cod_producto, I_2.ite_cod_producto FROM ITEM I
INNER JOIN ITEM I_2
ON I.fac_numero = I_2.fac_numero
AND I.ite_cod_producto < I_2.ite_cod_producto
GROUP BY I.ite_cod_producto, I_2.ite_cod_producto
HAVING COUNT(DISTINCT I.FAC_NUMERO) > 500
ORDER BY 1



hola... En el count no hace falta poner el distinct. solo seria necesario si en la misma factura tuviesemos mas de una vez el mismo codigo de producto...
tampoco esta mal asi, solo q estaria de mas.
URLs de referencia