1

テーブル ( ) を持つ SQL Server 2005 データベースがあり、ExpenseFormItems(とりわけ) 11 列 ( fromtraveltotraveltotravel1、.... )totravel2で住所を格納しています。 totravel3totravel9

基本的に、合計 11 のレグ/ストップ、および Google が計算した走行距離など (ここでは重要ではありません) の旅行です。

11 列すべてで最も頻繁に発生する (たとえば 15 の) アドレスと、その発生回数を返せるようにしたいと考えています。

だから基本的に

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

ここではある種の un/pivot が使用されると思いますが、以前に使用するほどクールなことをしたことがないので、このケースに適用する方法 (私がそれらについて読んだこと) を把握していません。 .

ティア

4

1 に答える 1

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

于 2013-04-17T21:59:44.480 に答える