SQL Server查询两列含FOO时获取另一列值及计数的实现方法
问题背景
当前使用SQL Server LocalDB,查询目标表包含两列:COL_LEFT、COL_RIGHT。
查询需求:
- 筛选两列中任意一列值为
FOO的所有行 - 最终返回两列结果:
- 第一列:与
FOO同行的另一列取值。即FOO在COL_LEFT时取对应行COL_RIGHT的值,FOO在COL_RIGHT时取对应行COL_LEFT的值 - 第二列:上述对应值的总出现次数
预期效果示例:
- 第一列:与
实现代码
核心思路是先通过UNION ALL归集两种匹配场景下的待统计值,再分组计数,语句如下:
SELECT MatchValue, COUNT(*) AS TotalCount FROM ( -- FOO出现在左列时,取对应右列值 SELECT COL_RIGHT AS MatchValue FROM 你的表名 WHERE COL_LEFT = 'FOO' UNION ALL -- FOO出现在右列时,取对应左列值 SELECT COL_LEFT AS MatchValue FROM 你的表名 WHERE COL_RIGHT = 'FOO' ) AS temp GROUP BY MatchValue
说明
- 用
UNION ALL而非UNION是为了避免自动去重导致计数偏差 - 实际使用时将语句中的
你的表名替换为真实表名即可,可按需加ORDER BY子句对结果排序
内容的提问来源于stack exchange,提问作者Totallama
相关产品推荐
相关产品推荐

