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 列存储街道地址(fromtraveltotraveltotravel1totravel2totravel3 ....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语句 怎么从一张表中查询数据插入到另一张表中

如何将SQL Server中多个表的数据一次性返回到一张EXCEL工作表(Sheet)中

根据查找值将值从一张表匹配并粘贴到另一张表中

在Microsoft SQL Server 2008中,将一张表的某列字段的值转换为列名称

怎样将sqlserver2005数据库中一张表的一半数据取出来

SQL Server更新表(用一张表的数据更新另一张表的数据)