Usuário com melhor resposta
Duplicando informações em uma tabela usando condições de outra tabela

Pergunta
-
Olá pessoal, tudo bem?
vejam se é possível fazer isso ou eu estou viajando demais.rsrsrs
Eu tenho um tabela (Tributação especifica) que é relacionada com outra tabela (produtos) pelo IDProduto.
Nessa tabela de Tributação especifica eu tenho 6 linhas inseridas que são tributações especificas de um unico produto. Eu agora precisaria pegar essas 6 linhas e duplicar elas para outros produtos.
só que existe uma condição pra essa duplicação, Precisa ser duplicado para todos os produtos que la na tabela PRODUTO, a Sttributacaoespecifica esteja como 'S'
valeu galera desde já pela possível ajuda.
Respostas
Todas as Respostas
-
Deleted
- Sugerido como Resposta Rodrigo CdS segunda-feira, 26 de novembro de 2018 19:46
-
As informações estão vagas demais... Poderia postar detalhes?
Eis esboço do código:
-- código #1
with Duplicar as ( SELECT colunas from Tributação where IDProduto = ___ ) SELECT P.IDProduto, ... from Produto as P cross join Duplicar as D where P.Sttributacaoespecifica = 'S' and P.IDProduto <> ___;
José Diz Belo Horizonte, MG - Brasil [Linked In] [e-mail] [Porto SQL]
Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
Olá, Lekao87!
Segue um exemplo utilizando a própria solução sugerida pelo José Diz. Lembrando que considerei que, de fato, os tributos teriam o mesmo nome na própria tabela, mudando apenas o id e o produto. No exemplo já considerei gerar um script caso você deseja utilizar esta query para inserção destas informações no seu banco de dados. É só um exemplo.
declare @produto as table ( Id int, Nome varchar(50), Sttributacaoespecifica char(1) NULL ) insert into @produto (Id, Nome, Sttributacaoespecifica) values (1, 'Produto 1', 'S'), (2, 'Produto 2', NULL), (3, 'Produto 3', 'S'), (4, 'Produto 4', 'S') select * from @produto declare @tributacaoEspecifica as table ( Id int identity (1,1), IdProduto int, Nome varchar(50) ) insert into @tributacaoEspecifica (IdProduto, Nome) values (1, 'Trb1'), (1, 'Trb2'), (1, 'Trb3'), (1, 'Trb4'), (1, 'Trb5'), (1, 'Trb6') ;with Duplicar as ( SELECT Id, IdProduto, Nome from @tributacaoEspecifica where IdProduto = 1 ) SELECT P.Id as IdProduto , D.Id as IdTributo , D.Nome , 'insert into @tributacaoEspecifica (IdProduto, Nome) values (' + cast(P.Id as varchar) + ', ''' + D.Nome + ''');' from @produto as P cross join Duplicar as D where P.Sttributacaoespecifica = 'S' and P.Id <> 1 order by P.Id, D.Id; insert into @tributacaoEspecifica (IdProduto, Nome) values (3, 'Trb1'); insert into @tributacaoEspecifica (IdProduto, Nome) values (3, 'Trb2'); insert into @tributacaoEspecifica (IdProduto, Nome) values (3, 'Trb3'); insert into @tributacaoEspecifica (IdProduto, Nome) values (3, 'Trb4'); insert into @tributacaoEspecifica (IdProduto, Nome) values (3, 'Trb5'); insert into @tributacaoEspecifica (IdProduto, Nome) values (3, 'Trb6'); insert into @tributacaoEspecifica (IdProduto, Nome) values (4, 'Trb1'); insert into @tributacaoEspecifica (IdProduto, Nome) values (4, 'Trb2'); insert into @tributacaoEspecifica (IdProduto, Nome) values (4, 'Trb3'); insert into @tributacaoEspecifica (IdProduto, Nome) values (4, 'Trb4'); insert into @tributacaoEspecifica (IdProduto, Nome) values (4, 'Trb5'); insert into @tributacaoEspecifica (IdProduto, Nome) values (4, 'Trb6'); select * from @tributacaoEspecifica
Divirta-se!
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 28 de novembro de 2018 10:50
-
o seu comando me ajudou baste
o comando ficou assim:
with Duplicar as (
SELECT cdempresa, idcfop, tpoperacao, tpoperacaocomplementar, idcfopequivalente, iduf
from Produto_Empresa_CFOP
where IDProduto = '00A0000HXW' )
SELECT P.IDProduto, d.cdempresa, d.idcfop, d.tpoperacao, d.tpoperacaocomplementar, d.idcfopequivalente, d.iduf
from Produto as P
cross join Duplicar as D
where P.Sttributacaoespecifica = 'S'
and P.IDProduto <> '00A0000HXW';o resultado dele é exatamente o que preciso inserir na tabela 'Produto_Empresa_CFOP'. como terminar agora?
- Editado Lekao87 segunda-feira, 26 de novembro de 2018 20:09
-