SQL Server:从一个表中的9列返回最常出现的值(和计数)

时间:2013-04-17 21:49:21

标签: sql sql-server unpivot

我有一个SQL Server 2005数据库,其中包含一个表(ExpenseFormItems),其中(以及其他内容)存储了11列(fromtraveltotraveltotravel1的街道地址,totravel2totravel3 .... totravel9)。

基本上是一次总共11次腿/站的旅行,以及Google计算的里程/等(这里不重要)。

我希望能够在所有11列中返回(比如15个)最常出现的地址,以及它们出现的次数。

所以基本上

[TO]             [Occurrances]
==============
address1               328
address2               233
address3               112
....
address15               23

我猜这里会使用某种un / pivot,但我以前从来没有做过任何足够酷的事情,所以我没有抓住如何申请(我读过他们的内容)对于这种情况。

TIA

1 个答案:

答案 0 :(得分:2)

听起来你想要UNPIVOT数据,它将从列中获取数据并将其转换为行。

基本结构将是:

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个最常用的地址,则可以向TOP 15添加SELECT