我在 SQL Server 中有一个查询,它尝试查找重复的列组合。它看起来像这样:
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
它生成如下数据集:
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
从分组中可以看出,SOC NUM 25113,CLS NUM 25 没有共同的 NTWRK ID,因此将被忽略:
SOC_NUM CLS_NUM CAT_NUM QERROR CNT
25113 25 TX9AW NBN_ID_ERROR 4
25113 25 WI913 NBN_ID_ERROR 4
但是,SOC NUM 25257,CLS NUM 9 的 NTWRK ID TX9AW 记录既无错误,又有 NBN ID 错误:
SOC_NUM CLS_NUM CAT_NUM QERROR CNT
25257 9 TX9AW NBN_ID_ERROR 5
25257 9 TX9AW No Error 1
我需要构建一个如下所示的 PIVOT 查询:
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
它将具有所有 SOC_NUM/CLS_NUM/CAT_NUM 组合,而不仅仅是上面的三个,我简化了预期的数据集以适应时间/空间限制。
这样做的目的是将结果与大型数据集进行匹配,并标记所有存在 2 个错误的记录(对于任何给定的 SOC_NUM/CLS_NUM/CAT_NUM 组合)。我认为,如果我采用这个 PIVOT 的结果,我就可以筛选出 ERROR 2 不为 NULL 的任何记录,这样我就可以找到我需要找到的所有组合。
有人能帮我构建完成此任务所需的 PIVOT 查询吗?我对 PIVOT 构造一无所知,我就是无法理解它。
看起来您只需要从
QERROR
分组中取出,然后使用MIN
和MAX
来获取两个不同的值。