SQL Server:从一张表的 9 列中返回最常出现的值(和计数)
Posted
技术标签:
【中文标题】SQL Server:从一张表的 9 列中返回最常出现的值(和计数)【英文标题】:SQL Server : return most frequently occurring values (and counts) from across 9 columns in one table 【发布时间】:2013-04-17 21:49:21 【问题描述】:我有一个 SQL Server 2005 数据库,其中包含一个表 (ExpenseFormItems
),该表(除其他外)跨 11 列存储街道地址(fromtravel
、totravel
、totravel1
、totravel2
、totravel3
....totravel9
)。
基本上有 11 次总行程/停留,以及 Google 计算的里程/等(此处不重要)。
我希望能够返回所有 11 列中(比如 15 个)最常出现的地址,以及它们出现的次数。
基本上
[TO] [Occurrances]
==============
address1 328
address2 233
address3 112
....
address15 23
我猜这里会用到某种 un/pivot,但我从来没有做过任何酷到可以用过的事情,所以我不知道如何应用(我读过关于它们的内容)本案。
TIA
【问题讨论】:
也许你应该考虑设计和存储数据而不是跨越 【参考方案1】:听起来您想取消透视数据,这将从列中获取数据并将其转换为行。
基本结构将是:
select col, address
from ExpenseFormItems
unpivot
(
address
for col in (fromtravel, totravel, totravel1,
totravel2, totravel3, totravel4,
totravel5, totravel6, totravel7,
totravel8, totravel9)
) unpiv
那么如果你想找到出现的次数,那么你可以使用:
select address, count(address) occurrences
from
(
select col, address
from ExpenseFormItems
unpivot
(
address
for col in (fromtravel, totravel, totravel1,
totravel2, totravel3, totravel4,
totravel5, totravel6, totravel7,
totravel8, totravel9)
) unpiv
) d
group by address
order by occurrences desc;
如果您想返回 15 个最常用的地址,那么您可以在SELECT
中添加一个TOP 15
。
【讨论】:
哇 :) 复制/粘贴,效果很好 :) 非常感谢 bluefeet,我得看一会儿才能消化它,但我想我现在有了一个基本的想法.感谢 marc_s 在我的帖子中添加块,我正在与编辑器争吵,无法获得预览使其看起来像那样,对不起,您不得不花时间。以上是关于SQL Server:从一张表的 9 列中返回最常出现的值(和计数)的主要内容,如果未能解决你的问题,请参考以下文章
如何将SQL Server中多个表的数据一次性返回到一张EXCEL工作表(Sheet)中
在Microsoft SQL Server 2008中,将一张表的某列字段的值转换为列名称