Tenho uma consulta no SQL Server que tenta encontrar combinações duplicadas de colunas. Parece algo assim:
SELECT SOC_NUM, CLS_NUM, CAT_NUM, QERROR, Sum(1) as CNT
FROM dbo.AS_Data_Disjoint_RPTS (nolock)
WHERE ReportName='NBN_Errors' AND QERROR IS NOT NULL
GROUP BY SOC_NUM, CLS_NUM, CAT_NUM, QERROR
ORDER BY SOC_NUM, CLS_NUM, CAT_NUM
Ele produz um conjunto de dados como este:
SOC_NUM CLS_NUM CAT_NUM QERROR CNT
25113 25 TX9AW NBN_ID_ERROR 4
25113 25 WI913 NBN_ID_ERROR 4
25113 26 TX9AW NBN_ID_ERROR 4
25113 26 WI913 NBN_ID_ERROR 4
25113 27 TX9AW NBN_ID_ERROR 4
25113 27 WI913 NBN_ID_ERROR 4
25257 9 TX9AW NBN_ID_ERROR 5
25257 9 TX9AW No Error 1
25257 10 TX9AW NBN_ID_ERROR 5
25257 10 TX9AW No Error 1
25257 11 TX9AW NBN_ID_ERROR 5
25257 11 TX9AW No Error 1
25257 12 TX9AW NBN_ID_ERROR 5
25257 12 TX9AW No Error 1
Como você pode ver pelos agrupamentos, SOC NUM 25113 e CLS NUM 25 não têm IDs NTWRK em comum e seriam ignorados:
SOC_NUM CLS_NUM CAT_NUM QERROR CNT
25113 25 TX9AW NBN_ID_ERROR 4
25113 25 WI913 NBN_ID_ERROR 4
Entretanto, SOC NUM 25257, CLS NUM 9 tem registros para NTWRK ID TX9AW que são No Error e NBN ID ERROR:
SOC_NUM CLS_NUM CAT_NUM QERROR CNT
25257 9 TX9AW NBN_ID_ERROR 5
25257 9 TX9AW No Error 1
Preciso criar uma consulta PIVOT que se pareça com esta:
SOC_NUM CLS_NUM CAT_NUM Error 1 Error 2
25113 25 TX9AW NBN ID ERROR NULL
25113 25 WI913 NBN ID ERROR NULL
25257 9 TX9AW NBN ID ERROR No Error
Teria todas as combinações SOC_NUM/CLS_NUM/CAT_NUM, não apenas as três acima. Simplifiquei o conjunto de dados esperado para restrições de tempo/espaço.
O objetivo disso é comparar os resultados com um grande conjunto de dados e sinalizar todos os registros onde há 2 erros para qualquer combinação SOC_NUM/CLS_NUM/CAT_NUM. Imaginei que se eu pegasse os resultados desse PIVOT, eu poderia filtrar por quaisquer registros onde ERROR 2 não fosse NULL e eu teria todas as combinações que eu precisava encontrar.
Alguém pode me ajudar a construir a consulta PIVOT necessária para concluir esta tarefa? Não tenho NENHUMA compreensão da construção PIVOT, simplesmente não consigo entender isso.
Parece que você só precisa retirar
QERROR
do agrupamento e usarMIN
eMAX
para obter dois valores diferentes.