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?
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.
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;
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
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.
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