【发布时间】:2018-01-10 16:40:55
【问题描述】:
请原谅,我仍在学习,但需要一些帮助。我所做的一些事情是以前问题的混合体,但我找不到我要找的东西。
我有一个包含 30 列数据的表,我们称之为 table1。每两列实际上是一组相同类型的数据,它们具有共同的意义和单独的意义。例如 col1 和 col2,就是一组名称。
像这样:
1 Jim Jeff
2 Mike Ben
3 Mike Mike
4 Peter Jeff
5 Jeff Jim
6 etc etc
此时剩下的 28 列并不重要。我想返回 col1 和 col2 中唯一名称的单个列表以及它们从两列中的总数。这是我所拥有的,它似乎在一定程度上起作用,但返回有问题。
SELECT col1, COUNT(*)
FROM table1
GROUP BY col1
UNION
SELECT col2, COUNT(*)
FROM table2
GROUP BY col2
问题是,当 col1 中的名称也在 col2 中时,它将返回两个计数。例如,如果我有 6 个不同的名称,总共 100 次,每列中有 50 个,我可能会看到上述查询返回的类似内容。
Jim 4
Jim 13
Jeff 8
Jeff 19
Mike 11
Mike 34
Ben 4
Brian 2
Peter 5
很明显,Jim、Jeff 和 Mike 出现在两个栏目中,而 Ben、Brian 和 Peter 只出现在一个栏目中(在我看来,哪一个并不重要)。
我需要返回的是:
Jim 17
Jeff 27
Mike 45
Ben 4
Brian 2
Peter 5
我尝试在 GROUP BY 中放置一个子查询来强制联合返回的内容没有计数(请原谅我,我不太了解 SQL,我只是根据我对该语言的了解很少做出假设),意思:
GROUP BY (SELECT col1 FROM table1 UNION SELECT col2 FROM table2)
但我想我在做出愚蠢的假设。有什么建议吗?
【问题讨论】:
标签: sql-server-2008