none
SELECT POR PERÍODO RRS feed

  • Pergunta

  • Preciso saber quais clientes tem contratos entre 2015 e 2016, porém todos os clientes estão voltando como retorno, o filtro utilizado está incorreto. Alguém pode me ajudar?

    SELECT Nome
    FROM Contrato, Cliente
    WHERE DataFinal BETWEEN '01/01/2015' AND '31/12/2016'


    • Editado TANBIO quarta-feira, 28 de outubro de 2015 13:51
    quarta-feira, 28 de outubro de 2015 13:44

Respostas

  • Todos os campos voltam por que no seu from, vc não faz um join entre as tabelas por isso tudo.
    A primeira coisa a fazer é o join:
    Isso vai resolver o fato de trazer todos os dados.

    SELECT cl.Nome
    FROM Contrato AS ct join Cliente AS cl
    	ON ct.id = cl.id_contrato

    Em seguida é preciso fazer a seleção, como não sei o tipo dos dados que vc usou, fiz um exemplo onde o campo DataFinal é do tipo DATE.

    SELECT cl.Nome,cl.datafinal,ct.contrato
    FROM Contrato AS ct join Cliente AS cl
    	ON ct.id = cl.id_contrato
    WHERE DATEPART(year,DataFinal) BETWEEN '2015' AND '2016'

    Script para as tabelas usadas no exemplo.

    CREATE TABLE [dbo].[CONTRATO](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[CONTRATO] [int] NULL,
     CONSTRAINT [PK_CONTRATO] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    
    CREATE TABLE [dbo].[CLIENTE](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[NOME] [varchar](50) NULL,
    	[ID_CONTRATO] [int] NULL,
    	[DATAFINAL] [date] NULL,
     CONSTRAINT [PK_CLIENTE] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    SET ANSI_PADDING OFF
    GO
    
    ALTER TABLE [dbo].[CLIENTE]  WITH CHECK ADD  CONSTRAINT [FK_CLIENTE_CONTRATO] FOREIGN KEY([ID_CONTRATO])
    REFERENCES [dbo].[CONTRATO] ([ID])
    GO
    
    ALTER TABLE [dbo].[CLIENTE] CHECK CONSTRAINT [FK_CLIENTE_CONTRATO]
    GO

    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"


    quarta-feira, 28 de outubro de 2015 13:55
  • Bom dia,

    Tanbio, pelo que vi está faltando especificar através de qual(is) coluna(s) as tabelas Contrato e Cliente relacionam-se.

    Exemplo utilizando a sintaxe com Join:

    SELECT cli.Nome
    FROM Contrato as con
    INNER JOIN Cliente as cli
        on cli.IdCliente = con.IdCliente
    WHERE con.DataFinal BETWEEN '01/01/2015' AND '31/12/2016'

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Marcos SJ quarta-feira, 28 de outubro de 2015 18:37
    quarta-feira, 28 de outubro de 2015 13:58

Todas as Respostas

  • Todos os campos voltam por que no seu from, vc não faz um join entre as tabelas por isso tudo.
    A primeira coisa a fazer é o join:
    Isso vai resolver o fato de trazer todos os dados.

    SELECT cl.Nome
    FROM Contrato AS ct join Cliente AS cl
    	ON ct.id = cl.id_contrato

    Em seguida é preciso fazer a seleção, como não sei o tipo dos dados que vc usou, fiz um exemplo onde o campo DataFinal é do tipo DATE.

    SELECT cl.Nome,cl.datafinal,ct.contrato
    FROM Contrato AS ct join Cliente AS cl
    	ON ct.id = cl.id_contrato
    WHERE DATEPART(year,DataFinal) BETWEEN '2015' AND '2016'

    Script para as tabelas usadas no exemplo.

    CREATE TABLE [dbo].[CONTRATO](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[CONTRATO] [int] NULL,
     CONSTRAINT [PK_CONTRATO] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    
    CREATE TABLE [dbo].[CLIENTE](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[NOME] [varchar](50) NULL,
    	[ID_CONTRATO] [int] NULL,
    	[DATAFINAL] [date] NULL,
     CONSTRAINT [PK_CLIENTE] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    SET ANSI_PADDING OFF
    GO
    
    ALTER TABLE [dbo].[CLIENTE]  WITH CHECK ADD  CONSTRAINT [FK_CLIENTE_CONTRATO] FOREIGN KEY([ID_CONTRATO])
    REFERENCES [dbo].[CONTRATO] ([ID])
    GO
    
    ALTER TABLE [dbo].[CLIENTE] CHECK CONSTRAINT [FK_CLIENTE_CONTRATO]
    GO

    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"


    quarta-feira, 28 de outubro de 2015 13:55
  • Bom dia,

    Tanbio, pelo que vi está faltando especificar através de qual(is) coluna(s) as tabelas Contrato e Cliente relacionam-se.

    Exemplo utilizando a sintaxe com Join:

    SELECT cli.Nome
    FROM Contrato as con
    INNER JOIN Cliente as cli
        on cli.IdCliente = con.IdCliente
    WHERE con.DataFinal BETWEEN '01/01/2015' AND '31/12/2016'

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Marcos SJ quarta-feira, 28 de outubro de 2015 18:37
    quarta-feira, 28 de outubro de 2015 13:58