我有一个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
答案 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
。