2017-01-30 10 views
1

SQL Serverの地理的機能を使用して、顧客に最も近い10のブランチオフィスを把握しようとしています。これは私が一人の顧客のために欲しいものを私に取得します。変数を使用してすべてのレコードを選択する

DECLARE @me GEOGRAPHY 
DECLARE @HH NVARCHAR(50) 

SELECT @Me = CustProspLoc, @HH = HHKEY FROM Customers 

SELECT DISTINCT TOP(10) @HH AS CustOmer, BranchNum, CONVERT(DECIMAL(10,1), (BranchLoc.STDistance(@me))/1609.344) AS Miles, BranchLoc.STDistance(@me) 
FROM 
BranchLocations 
WHERE CONVERT(DECIMAL(10,1), (BranchLoc.STDistance(@me))/1609.344) < 25 -- less than this many miles 
ORDER BY Miles 

、結果はこのようなものです:

Customer   BranchNum Miles 
------------------ --------- --------------------------- 
20192    14   1.8 
20192    145   4.4 
20192    193   5.3 
20192    7   6.0 
20192    17   7.4 
20192    8   7.6 
20192    3   8.7 
20192    2   9.3 
20192    9   9.8 
20192    1   10.0 

しかし、私が得るすべては私はそれを得ることができますどのように...その1人の顧客のための結果でありますCustomersテーブルのすべての顧客?

+0

を使用してみてください、あなたのテーブル構造を共有していただけますか? – Siyual

+0

2つのもの: 1)あなたの結果はTOP 10に限られています。それを削除し、結果がどのように見えるかを確認してください。おそらく理由#2のために問題ではないでしょう。 2)1つの変数に複数の値を割り当てることはできません。 – dfundako

+0

ヒープ/リスト/配列を持つことができる非構造化言語ではなく、SQLを使用していることを理解する必要があります。私はあなたのデータを一時テーブルまたはCTEに挿入して、あなたの顧客がそれをフィルタリングするように試みます。 –

答えて

1

は、このクエリに

Select * from(
SELECT row_number() over(partition by hhkey order by miles) as rownum, HHKEY as CustOmer, BranchNum, CONVERT(DECIMAL(10,1), (BranchLoc.STDistance(CustProspLoc))/1609.344) AS Miles, BranchLoc.STDistance(CustProspLoc) 
FROM 
BranchLocations,Customers 
WHERE CONVERT(DECIMAL(10,1), (BranchLoc.STDistance(CustProspLoc))/1609.344) < 25 -- less than this many miles 
ORDER BY Miles) as t1 where t1.rownum <= 10 
+1

エラーメッセージ: "over"というキーワードの構文が正しくありません –

+0

row_number関数の '()'を忘れてしまいました。私の答えを編集しました – Hadi

+0

@BrianBattlesそれでも動作しない場合はフィードバックをお願いします。 – Hadi

関連する問題