none
consulta com if RRS feed

  • Pergunta

  • Boas

    estou a tentar fazer uma consulta com a  seguinte tabela:

    Coluna Equipa

    Equipa A

    Equipa B

    Equipa C

    Preciso de criar uma consulta que me mostre os resultados da seguinte forma:

    Nome da equipa - A - B- C - D

    Equipa------------- X - X- X

    O objectivo é criar uma consulta onde mostre que existe a equipa A,B,C e D através de cruzes.

    Como faço isso?

    estava a experimentar o seguinte código mas sem resultado:

    select distinct substring(equipa,0,4) period, If((equipa) like "*******A" , "X","") A
    from tabela

    obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quinta-feira, 19 de abril de 2012 16:43

Respostas

  • Entendi,

    Então o 1º pesso é separar as colunas e depois fazer o pivot.

    Veja o exemplo abaixo.

    declare @table as table(
    coluna	varchar(15))
    
    insert into @table values('Equipa A');
    insert into @table values('Equipa B');
    insert into @table values('Equipa  C');
    --insert into @table values('Equipa','D');
    
    
    WITH CTE AS(
    SELECT 'Equipa' as Coluna , 
           LTRIM(RTRIM(RIGHT(coluna,LEN(coluna) - CHARINDEX(' ',COLUNA,1)))) EQUIPA 
    FROM @table)
    
    -- Resultado
    SELECT Coluna , 
    	   REPLACE([A],'A','X') AS A,
    	   REPLACE([B],'B','X') AS B,
    	   REPLACE([C],'C','X') AS C,
    	   REPLACE([D],'D','X') AS D
    FROM
    (SELECT Coluna, EQUIPA
        FROM CTE) AS SourceTable
    PIVOT
    (
    MAX(EQUIPA)
    FOR EQUIPA IN ([A], [B], [C], [D])
    ) AS PivotTable;

    Adriano
    sexta-feira, 20 de abril de 2012 13:46
  • Flashed,

    Só este select não faz isto.

    este select ai que você mostrou é só para formatar o seu regitro.

    Eu usei 2 selects para retonar o que você quer, 1 para formatar o registro ( dividir uma coluna em 2, para saber qual é a equipe A, B, C e assim por diante).

    E usei outro select para retonar do jeito que você precisa através do Pivot.

    daria para fazer tudo em um select só, ou mesmo de outras maneiras, mas fiz deste jeito que acho mais facil de entender.

    Refiz o exemplo completo para você ver, conforme abaixo.

    -- Cria tabela
    declare @table as table(
    coluna	varchar(15))
    
    -- insere registros
    insert into @table values('EquipaA');
    insert into @table values('EquipaB');
    insert into @table values('EquipaC');
    insert into @table values('EquipaG');
    --insert into @table values('Equipa','D');
    
    
    ---------------------------------------------------------------------------
    -- Os 2 comandos abaixo são necessários para retornar o que você precisa.
    ---------------------------------------------------------------------------
    -- Select
    WITH CTE AS(
    SELECT 'Equipa' as Coluna ,       
           RIGHT(Coluna,LEN(coluna)-6) as Equipa    
    FROM @table)
    
    -- Select do resultado 
    SELECT Coluna , 
    	   REPLACE([A],'A','X') AS A,
    	   REPLACE([B],'B','X') AS B,
    	   REPLACE([C],'C','X') AS C,
    	   REPLACE([D],'D','X') AS D
    FROM
    (SELECT Coluna, EQUIPA
        FROM CTE) AS SourceTable
    PIVOT
    (
    MAX(EQUIPA)
    FOR EQUIPA IN ([A], [B], [C], [D])
    ) AS PivotTable;

    Adriano
    sexta-feira, 20 de abril de 2012 14:54
  • Ai muda tudo..rsrs

    segue exemplo abaixo.

    -- Cria tabela
    declare @table as table(
    coluna	varchar(15))
    
    -- insere registros
    insert into @table values('EquipaA');
    insert into @table values('EquipaB');
    insert into @table values('EquipaC');
    insert into @table values('EquipaG');
    --insert into @table values('Equipa','D');
    
    
    ---------------------------------------------------------------------------
    -- Os 2 comandos abaixo são necessários para retornar o que você precisa.
    ---------------------------------------------------------------------------
    -- Select
    WITH CTE AS(
    SELECT 'Equipa' as Coluna ,       
           RIGHT(Coluna,LEN(coluna)-6) as Equipa    
    FROM @table)
    
    -- Select do resultado 
    SELECT Coluna , 
    	   CASE WHEN Equipa = 'A' THEN
    			'X' END A,
    	   CASE WHEN Equipa = 'B' THEN
    		    'X' END B,
    	   CASE WHEN Equipa = 'C' THEN
    		    'X' END C,
    	   CASE WHEN Equipa = 'D' THEN
    		    'X' END D
    FROM  CTE

    Adriano
    sexta-feira, 20 de abril de 2012 16:46

Todas as Respostas

  • Boa tarde,

    Veja se o exemplo abaixo te ajuda.

    declare @table as table(
    coluna	varchar(10),
    Equipa  char(1))
    
    insert into @table values('Equipa','A');
    insert into @table values('Equipa','B');
    insert into @table values('Equipa','C');
    --insert into @table values('Equipa','D');
    
    
    -- Resultado
    SELECT Coluna , 
    	   REPLACE([A],'A','X') AS A,
    	   REPLACE([B],'B','X') AS B,
    	   REPLACE([C],'C','X') AS C,
    	   REPLACE([D],'D','X') AS D
    FROM
    (SELECT Coluna, EQUIPA
        FROM @table) AS SourceTable
    PIVOT
    (
    MAX(EQUIPA)
    FOR EQUIPA IN ([A], [B], [C], [D])
    ) AS PivotTable;

    Adriano
    quinta-feira, 19 de abril de 2012 17:18
  • já estou a enteder.

    Mas voce fez Equipa numa coluna e A noutra

    eu preciso que Equipa A esteja na mesma coluna

    e depois tenho que conseguir incorporar um like neste código né?

    obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    sexta-feira, 20 de abril de 2012 08:27
  • Bom dia Flashed,

    Não entendi o que você precisa.

    O script que fiz pega a equipa A, B , E e D de registros e a tranforma em coluna.

    Não entendi para que você precisa do like, ele seria utilizado no where para limitar algum range de dados?

    O comando que fiz retorna os dados conforme abaixo, neste caso você precisa de algo diferente?

    Nome da equipa - A - B- C - D

    Equipa------------ X - X- X - Null

    Adriano

    sexta-feira, 20 de abril de 2012 12:56
  • Mas no seu exemplo tem duas colunas.

    No meu caso só tem uma:

    Com os dados assim:

    Equipa A

    Equipa B

    ...

    Preciso de fazer a pesquisa numa só tabela.

    entendeu?

    obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    sexta-feira, 20 de abril de 2012 13:18
  • Entendi,

    Então o 1º pesso é separar as colunas e depois fazer o pivot.

    Veja o exemplo abaixo.

    declare @table as table(
    coluna	varchar(15))
    
    insert into @table values('Equipa A');
    insert into @table values('Equipa B');
    insert into @table values('Equipa  C');
    --insert into @table values('Equipa','D');
    
    
    WITH CTE AS(
    SELECT 'Equipa' as Coluna , 
           LTRIM(RTRIM(RIGHT(coluna,LEN(coluna) - CHARINDEX(' ',COLUNA,1)))) EQUIPA 
    FROM @table)
    
    -- Resultado
    SELECT Coluna , 
    	   REPLACE([A],'A','X') AS A,
    	   REPLACE([B],'B','X') AS B,
    	   REPLACE([C],'C','X') AS C,
    	   REPLACE([D],'D','X') AS D
    FROM
    (SELECT Coluna, EQUIPA
        FROM CTE) AS SourceTable
    PIVOT
    (
    MAX(EQUIPA)
    FOR EQUIPA IN ([A], [B], [C], [D])
    ) AS PivotTable;

    Adriano
    sexta-feira, 20 de abril de 2012 13:46
  • me desculpe, esqueci um pormenor.

    não tem espaço entre a Equipa e a letra.

    Tentei alterar esta linha mas o resultado é nulo:

    LTRIM(RTRIM(RIGHT(coluna,LEN(coluna) - CHARINDEX('',COLUNA,1)))) EQUIPA

    Obrigado :)


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    sexta-feira, 20 de abril de 2012 13:54
  • Veja 2 maneiras abaixo.

    -- Se for para buscar a ultima letra da palavra
    SELECT 'Equipa' as Coluna ,       
           RIGHT(Coluna,1)   as Equipa   
    FROM @table   
    
    -- Se for para as letras após a palavra Equipa
    SELECT 'Equipa' as Coluna ,       
           RIGHT(Coluna,LEN(coluna)-6) as Equipa    
    FROM @table      
    
    Adriano
    sexta-feira, 20 de abril de 2012 14:14
  • Adriano estou confuso....

    Tenho a coluna equipa, lá tenho os seguintes resultados:

    EquipaA

    EquipaB

    EquipaE

    EquipaG

    Preciso de criar a consulta onde me mostre com um "X" se tem a letra A,B e C.

    Basta utilizar este select?

    SELECT 'Equipa' as Coluna , RIGHT(Coluna,LEN(coluna)-6) as Equipa FROM @table

    Me desculpa mas já estou dando um nó! :)

    obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    sexta-feira, 20 de abril de 2012 14:38
  • Flashed,

    Só este select não faz isto.

    este select ai que você mostrou é só para formatar o seu regitro.

    Eu usei 2 selects para retonar o que você quer, 1 para formatar o registro ( dividir uma coluna em 2, para saber qual é a equipe A, B, C e assim por diante).

    E usei outro select para retonar do jeito que você precisa através do Pivot.

    daria para fazer tudo em um select só, ou mesmo de outras maneiras, mas fiz deste jeito que acho mais facil de entender.

    Refiz o exemplo completo para você ver, conforme abaixo.

    -- Cria tabela
    declare @table as table(
    coluna	varchar(15))
    
    -- insere registros
    insert into @table values('EquipaA');
    insert into @table values('EquipaB');
    insert into @table values('EquipaC');
    insert into @table values('EquipaG');
    --insert into @table values('Equipa','D');
    
    
    ---------------------------------------------------------------------------
    -- Os 2 comandos abaixo são necessários para retornar o que você precisa.
    ---------------------------------------------------------------------------
    -- Select
    WITH CTE AS(
    SELECT 'Equipa' as Coluna ,       
           RIGHT(Coluna,LEN(coluna)-6) as Equipa    
    FROM @table)
    
    -- Select do resultado 
    SELECT Coluna , 
    	   REPLACE([A],'A','X') AS A,
    	   REPLACE([B],'B','X') AS B,
    	   REPLACE([C],'C','X') AS C,
    	   REPLACE([D],'D','X') AS D
    FROM
    (SELECT Coluna, EQUIPA
        FROM CTE) AS SourceTable
    PIVOT
    (
    MAX(EQUIPA)
    FOR EQUIPA IN ([A], [B], [C], [D])
    ) AS PivotTable;

    Adriano
    sexta-feira, 20 de abril de 2012 14:54
  • humm já  estou a entender.já estou a conseguir adaptar ao meu exemplo.

    MAs ele só faz para uma linha...

    o objectivo seria aparecer:

    Equipa A B C D

    equipa X
    equipa   X
    equipa       X


    Obrigado e desculpe a confusão anterior

    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    sexta-feira, 20 de abril de 2012 16:07
  • Ai muda tudo..rsrs

    segue exemplo abaixo.

    -- Cria tabela
    declare @table as table(
    coluna	varchar(15))
    
    -- insere registros
    insert into @table values('EquipaA');
    insert into @table values('EquipaB');
    insert into @table values('EquipaC');
    insert into @table values('EquipaG');
    --insert into @table values('Equipa','D');
    
    
    ---------------------------------------------------------------------------
    -- Os 2 comandos abaixo são necessários para retornar o que você precisa.
    ---------------------------------------------------------------------------
    -- Select
    WITH CTE AS(
    SELECT 'Equipa' as Coluna ,       
           RIGHT(Coluna,LEN(coluna)-6) as Equipa    
    FROM @table)
    
    -- Select do resultado 
    SELECT Coluna , 
    	   CASE WHEN Equipa = 'A' THEN
    			'X' END A,
    	   CASE WHEN Equipa = 'B' THEN
    		    'X' END B,
    	   CASE WHEN Equipa = 'C' THEN
    		    'X' END C,
    	   CASE WHEN Equipa = 'D' THEN
    		    'X' END D
    FROM  CTE

    Adriano
    sexta-feira, 20 de abril de 2012 16:46
  • :)

    Funcionou beleza

    Cada vez mais adoro sql :)

    Obrigado por tudo


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    sexta-feira, 20 de abril de 2012 17:18