none
relatório simples

    Question

  • Olá gente,

     

    Eu preciso fazer um relatório envolvendo 3 tabelas conforme abaixo, o objetivo do relatório é saber quantos convidados existem cadastrados para cada cidade, se alguém puder me ajudar agradeço, por enquanto não faço idéia por onde começar... grato!!!

     

    CREATE TABLE [dbo].[tb_Convidados](

    [id_convidado] [int] IDENTITY(1,1) NOT NULL,

    [id_cidade] [int] NULL

    CONSTRAINT [PK_tb_Convidados] PRIMARY KEY CLUSTERED

    (

    [id_convidado] ASC

    )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

    ) ON [PRIMARY]

     

     

    CREATE TABLE [dbo].[tb_ConvidadosEventos](

    [id_convidado_eventos] [int] IDENTITY(1,1) NOT NULL,

    [id_convidado] [int] NULL,

    [id_evento] [int] NULL,

    CONSTRAINT [PK_tb_ConvidadosEventos] PRIMARY KEY CLUSTERED

    (

    [id_convidado_eventos] ASC

    )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

    ) ON [PRIMARY]

     

     

    CREATE TABLE [dbo].[tb_Cidade](

    [id_cidade] [int] IDENTITY(1,1) NOT NULL,

    [id_estado] [int] NULL,

    [nome] [varchar](100) COLLATE Latin1_General_CI_AS NULL,

    CONSTRAINT [PK_Cidade] PRIMARY KEY CLUSTERED

    (

    [id_cidade] ASC

    )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

    ) ON [PRIMARY]

    Wednesday, May 14, 2008 6:19 PM

Answers

  •  

    Gilles,

     

         Você terá que fazer um join entre as tres tabelas:

     

        Select tb_ConvidadosEventos.id_evento, tb_cidade.nome, count(*) as Total

         From tb_ConvidadosEventos inner join tb_convidados on

         tb_ConvidadosEventos.id_Convidado = tb_convidados.id_Convidado

         inner join tb_cidade on tb_convidados.id_Cidade = tb_cidade.id_Cidade

         group by tb_ConvidadosEventos.id_evento, tb_cidade.nome

         order by tb_ConvidadosEventos.id_evento, tb_cidade.nome

     

          As tuas tabelas aceitam nulos nos campos de relacionamento para o join... Tome cuidado com isso, para evitar erros na geração do relatório.

          Filtrei também por Evento, caso você queira apenas por cidade (como mencionado no post) use este exemplo:

     

        Select tb_cidade.nome, count(*) as Total

         From tb_ConvidadosEventos inner join tb_convidados on

         tb_ConvidadosEventos.id_Convidado = tb_convidados.id_Convidado

         inner join tb_cidade on tb_convidados.id_Cidade = tb_cidade.id_Cidade

         group by tb_cidade.nome

         order by tb_cidade.nome

    Wednesday, May 14, 2008 6:39 PM

All replies

  •  

    Gilles,

     

         Você terá que fazer um join entre as tres tabelas:

     

        Select tb_ConvidadosEventos.id_evento, tb_cidade.nome, count(*) as Total

         From tb_ConvidadosEventos inner join tb_convidados on

         tb_ConvidadosEventos.id_Convidado = tb_convidados.id_Convidado

         inner join tb_cidade on tb_convidados.id_Cidade = tb_cidade.id_Cidade

         group by tb_ConvidadosEventos.id_evento, tb_cidade.nome

         order by tb_ConvidadosEventos.id_evento, tb_cidade.nome

     

          As tuas tabelas aceitam nulos nos campos de relacionamento para o join... Tome cuidado com isso, para evitar erros na geração do relatório.

          Filtrei também por Evento, caso você queira apenas por cidade (como mencionado no post) use este exemplo:

     

        Select tb_cidade.nome, count(*) as Total

         From tb_ConvidadosEventos inner join tb_convidados on

         tb_ConvidadosEventos.id_Convidado = tb_convidados.id_Convidado

         inner join tb_cidade on tb_convidados.id_Cidade = tb_cidade.id_Cidade

         group by tb_cidade.nome

         order by tb_cidade.nome

    Wednesday, May 14, 2008 6:39 PM
  • Valeu cara!!!

     

    Abraços,

     

    Giles

    Wednesday, May 14, 2008 6:48 PM
  • Giles,

     

    Bom você postou a estrutura das suas tables e também as chaves primárias existentes em cada uma delas, para poder retornar os dados que se relacionem é necessário fazer uma junção de dados entre estas tables, fazendo referência aos atributos de relacionamento.

     

    Veja se isso ajuda:

     

    Code Snippet

    select ci.id_cidade, ci.nome,

    c.id_convidado,

    ce.id_convidado_eventos

    from tb_cidade ci Inner Join tb_convidados c

    On ci.id_cidade = c.id_cidade

    Inner Join tb_ConvidadosEventos ce

     On ce.id_convidado = c.id_convidado

     

     

    Wednesday, May 14, 2008 6:52 PM