SQL Server中按指定列关联条数对表行降序重排的SQL实现
原有代码问题说明
你编写的SQL仅返回了分组聚合后的疾病编码和对应症状计数,丢失了原始表中的症状编码列以及所有明细行,因此无法输出要求的重排后的完整表数据。
方案1:使用窗口函数(推荐,适配SQL Server 2008及以上版本)
直接通过窗口函数统计每个疾病对应的症状总数,基于该数值排序即可保留所有原始行:
SELECT D, S FROM [D-S] ORDER BY COUNT(S) OVER (PARTITION BY D) DESC, D
逻辑说明:COUNT(S) OVER (PARTITION BY D) 会为每行计算该行对应疾病的症状总数量,按该值降序排序即可实现关联症状多的疾病整体靠前,追加的D排序用于保证症状数相同的疾病按编码有序排列。
方案2:兼容极老版本SQL Server的关联写法
如果使用的是不支持窗口函数的旧版本,可以先统计每个疾病的症状数,再和原表关联后排序:
SELECT t.D, t.S FROM [D-S] t INNER JOIN ( SELECT D, COUNT(S) AS symptom_count FROM [D-S] GROUP BY D ) AS d_count ON t.D = d_count.D ORDER BY d_count.symptom_count DESC, t.D
内容的提问来源于stack exchange,提问作者AmHsnSharafi
相关产品推荐
相关产品推荐

