1

我有一个带有表 ( ExpenseFormItems) 的 SQL Server 2005 数据库,该表(除其他外)跨 11 列(fromtravel, totravel, totravel1, totravel2.... totravel3)存储街道地址totravel9

基本上是一次有 11 次总行程/停留的旅行,以及谷歌计算的里程/等(这里不重要)。

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

所以基本上

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

我猜这里将使用某种 un/pivot,但我从来没有做过任何足够酷的事情来使用过一个,所以我没有掌握如何将(我读过的关于它们的内容)应用于这个案例.

TIA

4

1 回答 1

2

听起来您想取消透视数据,该数据将从列中获取数据并将其转换为行。

基本结构将是:

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 15SELECT.

于 2013-04-17T21:59:44.480 回答