none
Duvida com o Select e o Count RRS feed

  • Pergunta

  • Pessoal tenho uma tabela de imoveis  que tem as seguintes colunas:

    ID,int

    codImobiliaria, int

    status, smallint sendo 0=bloqueado e 1=liberado

    eu preciso retornar uma lista com as seguintes colunas:

    codImobiliaria, totalBloqueados, totalLiberados, TotalGeral

    Como eu devo fazer a select para retornar estas colunas?

    Obrigado

    quarta-feira, 17 de julho de 2013 17:18

Respostas

  • João,

    Segue um exemplo de implementação:

    DECLARE @imoveis TABLE
    (
    	Id INT,
    	codImobiliaria INT,
    	[Status] INT
    )
    
    INSERT INTO @imoveis VALUES
    (1, 1, 1),
    (2, 1, 0),
    (3, 2, 1)
    
    SELECT
    CodImobiliaria,
    SUM(CASE WHEN [Status] = 1 THEN 1 ELSE 0 END) As TotalLiberado,
    SUM(CASE WHEN [Status] = 0 THEN 1 ELSE 0 END) As TotalBloqueado,
    COUNT(*) As TotalGeral
    FROM @imoveis
    GROUP BY codImobiliaria


    <b>Fabrizzio A. Caputo</b><br/> Certificações:<br/> MCT<br/> MCC<br/> Oracle OCA 11g<br/> MCITP SQL Server 2008 BI<br/> MCITP SQL Server 2008 Implementation and Maintenance<br/> MCITP SQL Server 2008 Developer<br/> ITIL V3 Foundation <br/> Blog Pessoal: <a href="http://fabrizziocaputo.wordpress.com">www.fabrizziocaputo.wordpress.com</a><br/> Email: fabrizzio.antoniaci@gmail.com


    quarta-feira, 17 de julho de 2013 17:26
    Moderador

Todas as Respostas

  • João,

    Segue um exemplo de implementação:

    DECLARE @imoveis TABLE
    (
    	Id INT,
    	codImobiliaria INT,
    	[Status] INT
    )
    
    INSERT INTO @imoveis VALUES
    (1, 1, 1),
    (2, 1, 0),
    (3, 2, 1)
    
    SELECT
    CodImobiliaria,
    SUM(CASE WHEN [Status] = 1 THEN 1 ELSE 0 END) As TotalLiberado,
    SUM(CASE WHEN [Status] = 0 THEN 1 ELSE 0 END) As TotalBloqueado,
    COUNT(*) As TotalGeral
    FROM @imoveis
    GROUP BY codImobiliaria


    <b>Fabrizzio A. Caputo</b><br/> Certificações:<br/> MCT<br/> MCC<br/> Oracle OCA 11g<br/> MCITP SQL Server 2008 BI<br/> MCITP SQL Server 2008 Implementation and Maintenance<br/> MCITP SQL Server 2008 Developer<br/> ITIL V3 Foundation <br/> Blog Pessoal: <a href="http://fabrizziocaputo.wordpress.com">www.fabrizziocaputo.wordpress.com</a><br/> Email: fabrizzio.antoniaci@gmail.com


    quarta-feira, 17 de julho de 2013 17:26
    Moderador
  • Somente para complementar tem essa forma também :

    SELECT DISTINCT I.codImobiliaria,B.Tb As TotalBloqueados,
    L.Tl AS TotalLiberados FROM Imovel I
    
    INNER JOIN (SELECT codImobiliaria,COUNT(Status) As Tb FROM Imoveis
     		WHERE Status = 0 GROUP BY codImobiliaria) B
     ON B.codImobiliaria = I.codImobiliaria
    INNER JOIN (SELECT codImobiliaria,COUNT(Status) AS Tl FROM Imoveis
     		WHERE Status = 1 GROUP BY codImobiliaria) L
    
     ON L.codImobiliaria = I.codImobiliaria



    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br


    • Editado Davi Murilo quarta-feira, 17 de julho de 2013 17:37 Codigo
    quarta-feira, 17 de julho de 2013 17:36
  • Fabrizzio muito obrigado deu certinho.
    quarta-feira, 17 de julho de 2013 17:43