none
Retornar dados com WHERE de 3 valores em uma coluna apenas RRS feed

  • Pergunta

  • Tenho essas Tres tabelas tabelas:

    |Clientes |
    |ID Nome RG |
    |1 Vitor                 123 |
    |2 Sabrinha  235 |
    |3 Calor 984 |


    |Checks |
    |ID  Nome |
    |1 Check1 |
    |2 Check2 |
    |3 Check3 |


    |Acessos |
    |ID ID_CLIENTE ID_CHECK|
    |1 1 1 |
    |2 2 1 |
    |3 1 2 |
    |4 3 2 |
    |5 1 3 |
    |6 2 3 |
    |7 3 3 |


    E preciso por Um select retornar so quem tem acesso ao check 1,2,3

    Se eu usar Where id_check='1' AND id_check='2' AND id_check='3'
    Não ira retornar nada, e caso eu mude para OR ao inves de AND ele ira retornar  todos ,e caso eu use tambem esse comando
    WHERE id_check IN (1,2,3) ira me retornar todos os clientes, como por forma de select consiguo trazer apenas o cliente 1 que tem acesso a todos os checks ?

    No aguardo....

    quarta-feira, 23 de setembro de 2015 18:09

Respostas

  • O unico jeito é concatenar as linhas, este jeito:

    Select * from (
    SELECT A.ID_CLIENTE,STUFF((SELECT ',' + B.ID_CHECK
    FROM Acessos B
    WHERE A.ID_CLIENTE=B.ID_CLIENTE
    ORDER BY B.ID_CLIENTE, B.ID_CHECK
    FOR XML PATH(''),TYPE ).VALUE('.','varchar(max)') ,1,2, '' )
    AS AcessosCliente
    FROM Acessos A 
    GROUP BY A.ID_CLIENTE) C
    where C.AcessosCliente='1,2,3'

    Ou em cascata

    select * 
    from Acessos
    where id_check='3'
    and ID_CLIENTE in
       (select ID_CLIENTE 
        from Acessos 
        where id_check='2'
        and ID_CLIENTE in
            (select ID_CLIENTE 
             from Acessos 
             where id_check='1'
            )
        )
    


    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    quarta-feira, 23 de setembro de 2015 18:27
    Moderador

Todas as Respostas

  • O unico jeito é concatenar as linhas, este jeito:

    Select * from (
    SELECT A.ID_CLIENTE,STUFF((SELECT ',' + B.ID_CHECK
    FROM Acessos B
    WHERE A.ID_CLIENTE=B.ID_CLIENTE
    ORDER BY B.ID_CLIENTE, B.ID_CHECK
    FOR XML PATH(''),TYPE ).VALUE('.','varchar(max)') ,1,2, '' )
    AS AcessosCliente
    FROM Acessos A 
    GROUP BY A.ID_CLIENTE) C
    where C.AcessosCliente='1,2,3'

    Ou em cascata

    select * 
    from Acessos
    where id_check='3'
    and ID_CLIENTE in
       (select ID_CLIENTE 
        from Acessos 
        where id_check='2'
        and ID_CLIENTE in
            (select ID_CLIENTE 
             from Acessos 
             where id_check='1'
            )
        )
    


    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    quarta-feira, 23 de setembro de 2015 18:27
    Moderador
  • Muito Obrigado William usei o método em cascata e funcionou, muito Obrigado mesmo!
    quarta-feira, 23 de setembro de 2015 19:19