跨列的SQL计数

时间:2017-01-15 21:27:00

标签: sql sql-server

我知道这个表结构太可怕了,我应该研究数据库规范化,但这是我现在必须要处理的。

我需要在列中找到最常见的数字 ,其中一个具有特定ID(在我的示例rollback()中)。两列都从不具有相同的值。

查询

3

结果

SELECT Col1, Col2 FROM scores WHERE Col1 = 3 OR Col2 = 3

我希望得到这样的结果(我不需要计算3,因为它是ID,但它可以包括在内)

+------+------+
| Col1 | Col2 |
+------+------+
|    1 |    3 |
|    3 |    1 |
|    2 |    3 |
|    6 |    3 |
|    3 |    7 |
|    3 |    9 |
|    2 |    3 |
|    5 |    3 |
+------+------+

我尝试了一些诸如+-------+-------+ | Value | Count | +-------+-------+ | 1 | 2 | | 2 | 2 | | 5 | 1 | | 6 | 1 | | 7 | 1 | | 9 | 1 | +-------+-------+ 和嵌套UNION之类的东西,但这似乎无法解决这个问题。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果您想要对OTHER列为3的值进行计数,那么UNION的工作方式如下:

SELECT value, theCount = COUNT(*)
FROM (
    SELECT value = col1
    FROM scores
    WHERE col2 = 3
    UNION ALL
    SELECT col2
    FROM scores
    WHERE col1 = 3) T
GROUP BY value
ORDER BY value;

答案 1 :(得分:0)

一种方法是使用案例:

{{1}}