DUVIDA SELECT PRODUTOS
olá galera estou com a seguinte dúvida, não sei se há como fazer esse select mas vamos lá:
tb_pedidos
loja_id | pedido_id | produto_id
1 123 30
1 123 500
1 666 30
2 456 30
2 456 600
2 789 30
eu preciso que retorne os pedidos que tenham somente o produto_id 30 se tiver outro junto não retorne, nesse caso da tabela teria que retornar apenas as linhas
loja_id | pedido_id | produto_id
1 666 30
2 789 30
será que tem como fazer isso?
Obrigado.
tb_pedidos
loja_id | pedido_id | produto_id
1 123 30
1 123 500
1 666 30
2 456 30
2 456 600
2 789 30
eu preciso que retorne os pedidos que tenham somente o produto_id 30 se tiver outro junto não retorne, nesse caso da tabela teria que retornar apenas as linhas
loja_id | pedido_id | produto_id
1 666 30
2 789 30
será que tem como fazer isso?
Obrigado.
se for 2005 ou superior
declare @tbteste as table(loja_id int, pedido_id int, produto_id int)
insert into @tbteste values(1,123,30)
insert into @tbteste values(1,123,500)
insert into @tbteste values(1,666,30)
insert into @tbteste values(2,456,30)
insert into @tbteste values(2,456,600)
insert into @tbteste values(2,789,30)
;with cte_dados as
(
select ROW_NUMBER() over (partition by loja_id,pedido_id order by loja_id,pedido_id) num,*
from @tbTeste
)
select loja_id, pedido_id, produto_id from cte_dados where produto_id=30 and pedido_id not in (select pedido_id from cte_dados where num >1)
declare @tbteste as table(loja_id int, pedido_id int, produto_id int)
insert into @tbteste values(1,123,30)
insert into @tbteste values(1,123,500)
insert into @tbteste values(1,666,30)
insert into @tbteste values(2,456,30)
insert into @tbteste values(2,456,600)
insert into @tbteste values(2,789,30)
;with cte_dados as
(
select ROW_NUMBER() over (partition by loja_id,pedido_id order by loja_id,pedido_id) num,*
from @tbTeste
)
select loja_id, pedido_id, produto_id from cte_dados where produto_id=30 and pedido_id not in (select pedido_id from cte_dados where num >1)
usa assim:
select * from tb_pedidos where produto_id=30 group by pedido_id
select * from tb_pedidos where produto_id=30 group by pedido_id
vc pode fazer assim tbm
SELECT
T.loja_id , T.pedido_id, T.produto_id
FROM
@tbteste AS T
WHERE
T.produto_id = 30
AND EXISTS (SELECT 1 FROM @tbteste
WHERE loja_id = T.loja_id AND T.pedido_id = pedido_id
GROUP BY loja_id , pedido_id
HAVING COUNT(pedido_id) = 1
)
ORDER BY
SELECT
T.loja_id , T.pedido_id, T.produto_id
FROM
@tbteste AS T
WHERE
T.produto_id = 30
AND EXISTS (SELECT 1 FROM @tbteste
WHERE loja_id = T.loja_id AND T.pedido_id = pedido_id
GROUP BY loja_id , pedido_id
HAVING COUNT(pedido_id) = 1
)
ORDER BY
select MAX (pedido_id) pedido_id ,loja_id ,produto_id from tbteste
WHERE
produto_id = 30
GROUP BY loja_id ,produto_id
WHERE
produto_id = 30
GROUP BY loja_id ,produto_id
Tópico encerrado , respostas não são mais permitidas