我正在使用这个 sql 代码查询一个表(我的表有 NULL 值):
SELECT x.f1,Count(x.f1) FROM
(SELECT p1 As F1 FROM table
UNION ALL
SELECT p2 As F1 FROM table
UNION ALL
SELECT p3 As F1 FROM table) x
GROUP BY x.f1
此代码实现了该用户提出的问题: SQL, count in multiple columns then group by
但是,当我在所有列上使用此语句手动测试表中某个项目的计数时:
WHERE col1 or col2 or col3, etc = 'entry name'
,我得到的该条目的计数与联合查询不同。联合查询要么超出手动查询的数量,要么等于手动查询(我想要的)。例如,对于某个条目,手动查询会返回 2,联合查询会返回 4。
我意识到这个问题有点含糊,因为我无法透露我的表格信息或确切的查询,但我想知道我是否遗漏了一些重要的东西。谢谢!
PS。我正在使用 MS SQL 服务器 2012
编辑:示例(取自先前用户的帖子),以澄清:
源数据表:
P1 P2 P3
-----------
a b
a a a
b c
a b b
b a
我希望它显示如下内容:
所需的查询输出:
Total
-------------
a | 6
b | 5
c | 1
对 MY 表使用上面的 UNION 查询代码,我将得到 12 作为“a”的总数。使用我的手动查询:
SELECT *
FROM TABLE
WHERE P1 = 'a' OR P2 = 'a' OR P3 ='a'
, 我会得到 6 的总数。
我的问题是,两个查询不应该返回相同的值吗?