ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

ajuda com stored procedure SQL Server 2008

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
leo_bruno
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Abril de 2010
Mensagens: 666

MensagemEnviada: Ter Mai 22, 2018 9:56 am    Assunto: ajuda com stored procedure SQL Server 2008 Responder com Citação

olá pessoal:

Preciso criar uma stored procedure pra me retornar dados de 2 selects diferentes, sendo que o segundo select, usara parte do retoro do primeiro select como parametro de entrada.

Não tenho muita experiencia com esse sgbd e não estou tendo sucesso com o google.

abaixo um exemplo do que eu preciso fazer, escrito da maneira que estou acostumado fazer no firebird.

como retorno, eu teria os campos "saida" de 1 a 6.

Código:

FOR
   SELECT a.valor1,
           b.valor2,
           c.valor3,
          c.valor4      
   FROM tab_1 a
        INNER JOIN tab_2 b ON (a.cod1 = b.cod1)
       INNER JOIN tab_3 c ON (b.cod2 = c.cod2)
    INTO
      :saida1,
      :saida2,
      :saida3,
      :saida4
DO
BEGIN
   SELECT d.valor5,
          d.valor6,
         d.valor7
   FROM tab_4 d
        WHERE d.cod3 = :saida1
        AND d.cod4 = :saida2
    INTO
        :saida5,
       :saida6
    SUSPEND;   
END


Alguem pode me ajudar?

Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Mai 22, 2018 10:22 am    Assunto: Responder com Citação

Bom dia,

Pelo que entendi acredito que você poderia juntar tudo com um Join a mais:

Código:
SELECT
    a.valor1,
    b.valor2,
    c.valor3,
    c.valor4,
    d.valor5,
    d.valor6,
    d.valor7
FROM tab_1 a
INNER JOIN tab_2 b ON a.cod1 = b.cod1
INNER JOIN tab_3 c ON b.cod2 = c.cod2
INNER JOIN tab_4 d ON d.cod3 = a.valor1 AND d.cod4 = b.valor2


Espero que ajude


Editado pela última vez por imex em Seg Out 02, 2023 11:42 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_bruno
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Abril de 2010
Mensagens: 666

MensagemEnviada: Ter Mai 22, 2018 10:30 am    Assunto: Responder com Citação

Imex, muito obrigado pela resposta, na verdade eu simplifiquei a consulta de maneira a ficar mais didático.

Eu realmente preciso passar o resultado do primeiro select como paramentro de entrada do segundo, e retornar na saida, uma combinação das saidas do primeiro e segundo select.

obrigado pela iniciativa, mas a sua resposta não resolve o meu problema.

imex escreveu:
Bom dia,

Pelo que entendi acredito que você poderia juntar tudo com um Join a mais:

Código:
SELECT
    a.valor1,
    b.valor2,
    c.valor3,
    c.valor4,
    d.valor5,
    d.valor6,
    d.valor7
FROM tab_1 a
INNER JOIN tab_2 b ON a.cod1 = b.cod1
INNER JOIN tab_3 c ON b.cod2 = c.cod2
INNER JOIN tab_4 d ON d.cod3 = a.valor1 AND d.cod4 = b.valor2


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_bruno
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Abril de 2010
Mensagens: 666

MensagemEnviada: Ter Mai 22, 2018 10:31 am    Assunto: Responder com Citação

leo_bruno escreveu:
Imex, muito obrigado pela resposta, na verdade eu simplifiquei a consulta de maneira a ficar mais didático.

Eu realmente preciso passar o resultado do primeiro select como paramentro de entrada do segundo, e retornar na saida, uma combinação das saidas do primeiro e segundo select.

obrigado pela iniciativa, mas a sua resposta não resolve o meu problema, pois se resolvesse, eu nao precisaria de uma procedure, não é mesmo?

imex escreveu:
Bom dia,

Pelo que entendi acredito que você poderia juntar tudo com um Join a mais:

Código:
SELECT
    a.valor1,
    b.valor2,
    c.valor3,
    c.valor4,
    d.valor5,
    d.valor6,
    d.valor7
FROM tab_1 a
INNER JOIN tab_2 b ON a.cod1 = b.cod1
INNER JOIN tab_3 c ON b.cod2 = c.cod2
INNER JOIN tab_4 d ON d.cod3 = a.valor1 AND d.cod4 = b.valor2


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Mai 22, 2018 11:18 am    Assunto: Responder com Citação

Acho que é melhor você postar um outro exemplo para podermos entender o problema.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_bruno
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Abril de 2010
Mensagens: 666

MensagemEnviada: Ter Mai 22, 2018 11:37 am    Assunto: Responder com Citação

Trata-se de uma tabela de precos, que gera 1 linha para cada combinacao de graduacao de marca, tipo de item, e graduacao de avaliacao.

hoje temos 6 graduacoes de avaliacao e 3 graduacoes de marca.

entao, pra cada tipo de item, vai retornar 18 linhas.

eu preciso retornar em colunas, os valores dos precos baseados na graduacao da avaliacao.

sendo assim, eu poderia passar o codigo de cada graducao engessado no select, pra retornar apenas 3 linhas, com os 6 precos em colunas, e fazendo distinct no select.

Mas um requisito é que a consulta seja dinamica e acomode futuros novos valores de graduacao de avaliacao.

Entao, a abordagem que usei como exemplo, funciona e me traz o retorno que preciso.

Ja testei e rodou no firebird.

porem estou com dificuldade na sintaxe para sql server 2008.

Nao estou sabendo como fazer.

Nao vai fazer diferenca eu mudar o nome das colunas e tabelas no exemplo que dei, pq nao estou precisando da logica da consulta. Apenas da sintaxe para obter aquele resultado.

imex escreveu:
Acho que é melhor você postar um outro exemplo para
podermos entender o problema.


Editado pela última vez por leo_bruno em Ter Mai 22, 2018 12:16 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Mai 22, 2018 12:05 pm    Assunto: Responder com Citação

Desculpe a minha sugestão anterior incorreta e a dificuldade para entender a sua questão.
Se você quer transformar linhas em colunas no SQL Server, de uma pesquisada sobre Pivot. E para não deixar códigos fixos na query procure especificamente sobre Pivot dinâmico, ou acho que você também pode montar essa query com Pivot dinamicamente na sua aplicação.

Espero que tenha entendido corretamente dessa vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_bruno
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Abril de 2010
Mensagens: 666

MensagemEnviada: Ter Mai 22, 2018 12:25 pm    Assunto: Responder com Citação

Obrigado imex.

Seguindo a sua dica, encontrei o material pra me ajudar.

Posto a resposta quando tiver a confirmação.

imex escreveu:
Desculpe a minha sugestão anterior incorreta e a dificuldade para entender a sua questão.
Se você quer transformar linhas em colunas no SQL Server, de uma pesquisada sobre Pivot. E para não deixar códigos fixos na query procure especificamente sobre Pivot dinâmico, ou acho que você também pode montar essa query com Pivot dinamicamente na sua aplicação.

Espero que tenha entendido corretamente dessa vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB