Sql

Sou iniciante em SQL e preciso de ajuda para solucionar um problema de SQL conforme tabela abaixo:

CodigoInscricao_____Programa______NumeroAutenticacao
12345678_____________1_________________254
12345678_____________1_________________255
12345678_____________1_________________256
12345678_____________2_________________257
87654321_____________1_________________325
87654321_____________1_________________325
87654321_____________1_________________325
87654321_____________2_________________325
12345689_____________1_________________401
12345689_____________1_________________401
12345689_____________2_________________403

Como faço para colocar uma flag indicando se o código de inscrição pertence somente a 1 ou aos 2 programas e se o numero de autenticação é o mesmo para os referidos códigos de inscrição?

não entendi nada.
esses códigos acima são as colunas?
qual o nome da tabela?

Sim, são as colunas

Explique melhor, está muito confuso a sua explicação
?

Boa tarde amigos.

Basicamente ele quer colocar uma discriminator column para identificar os registros dependendo do banco de dados a qual ele pertence. Ele deve estar usando algum tipo de Multitenancy.

Se ninguém responder eu coloca um exemplo assim que der uma brecha por aqui.

Boa sorte a todos. :metal::sunglasses::metal:

Vou tentar explicar melhor.

O código de inscrição 12345678 pertence ao programa 1 e ao programa 2 e os números de autenticação para cada linha de registro são diferentes (254, 255, 256, 257)
O código de inscrição 87654321 pertence ao programa 1 e ao programa 2 e os números de autenticação para cada linha de registro são iguais (325)
O código de inscrição 12345689 pertence ao programa 1 e ao programa 2. Entretanto para as linhas de registro do programa 1 os números de autenticação são iguais (401) e para o programa 2 é 403.
Eu poderia até ter acrescentado mais 2 linhas com uma inscrição, por exemplo, 12365489, pertencente somente ao programa 1 e números de autenticação iguais a 500.

Agora vem a pergunta:

Como eu faço uma query que me diga se uma inscrição pertence somente a um ou ambos os programas e se os seus números de autenticação são ou não iguais?

John, pelo que eu entendi o que você quer é fazer o group by por duas colunas o CodigoInscricao e o Programa. Esse é o link do básico do group by e para a consulta no seu caso seria:

SELECT CodigoInscricao, Programa
FROM [nome_tabela]
GROUP BY Programa, CodigoInscricao;

Não é bem isso amigão. Estou querendo algo como o resultado abaixo:

CodigoInscricao___________________Somente_do_Programa_1____________NumAuteticacaoIgual
12345678_________________________________NAO______________________________NAO
87654321_________________________________NAO______________________________SIM
12345689_________________________________NAO______________________________NAO
SELECT 
 CASE WHEN (SELECT COUNT(*) FROM NOME_TABELA T FROM
 T.CodigoInscricao=A.CodigoInscricao AND 
 T.NumeroAutenticacao=A.NumeroAutenticacao) >1
 THEN 'POSSUI MAIS DE 1' ELSE 'NÃO POSSUI MAIS DE UM' END) AS FLAG
FROM 
NOME_TABELA A

Como tu não colocou o nome da tabela, tu vai ter que adaptar o código e veja se isso te atende

1 curtida

Não atende, seu código só serve pra contar se tem mais de uma inscrição ou não. Não é isso que eu quero. Quero um código que classifique se a inscrição está em mais de um programa e se os números de autenticação são os mesmos.
O nome da tabela é HistoricoAutorizacao.

Boa noite amigo.

O que você quer fazer, pelo menos em sql é uma m… de fazer e o resultado desejado que você passou no último post não bate com a tabela de valores apresentados, o código sql para suprir todos os critérios necessários para esse exato resultado será enorme e muiiiiiiiiiiiiiito lendo.

Segue um código que entrega algo parecido:

SELECT
    HT.CODIGOINSCRICAO,
    CASE WHEN PROGRAMA_1 = 1 AND PROGRAMA_2 = 2 THEN 'NAO' WHEN PROGRAMA_1 = 1 AND PROGRAMA_2 IS NULL THEN 'SIM' END SOMENTE_DO_PROGRAMA_1,
    CASE WHEN N4 > 1 THEN 'SIM' ELSE 'NAO' END NUMAUTENTICACAOIGUAL
FROM
    HISTORICOAUTORIZACAO HT
    LEFT JOIN (SELECT CODIGOINSCRICAO COD2, PROGRAMA PROGRAMA_1 FROM HISTORICOAUTORIZACAO WHERE PROGRAMA = 1) HP ON HT.CODIGOINSCRICAO = HP.COD2
    LEFT JOIN (SELECT CODIGOINSCRICAO COD3, PROGRAMA PROGRAMA_2 FROM HISTORICOAUTORIZACAO WHERE PROGRAMA = 2) HP2 ON HT.CODIGOINSCRICAO = HP2.COD3
    LEFT JOIN (SELECT CODIGOINSCRICAO COD4, NUMEROAUTENTICACAO NUM4, COUNT(NUMEROAUTENTICACAO) N4 FROM HISTORICOAUTORIZACAO GROUP BY CODIGOINSCRICAO, NUMEROAUTENTICACAO) HP3 ON HT.CODIGOINSCRICAO = HP3.COD4
GROUP BY
    CODIGOINSCRICAO,
    PROGRAMA_1,
    PROGRAMA_2,
    N4

Saída:

image

Espero que isso ajude em algo. :metal::sunglasses::metal: