2017-12-20 5 views
1

私はこのクエリを実行するとSQL分は

SELECT Ref, 
     YOA, 
     Account, 
     Cert, 
     MIN(Unit) AS Unit, 
     Name 
     Currency, 
     Amount 

FROM #TMP_Accounts 

GROUP BY Ref, 
      YOA, 
      Account, 
      Cert, 
      Name, 
      Currency, 
      Amount 

以下に記載されている一時テーブルからデータを選択するクエリを持って、私は次のような結果を得る:

Ref  YOA  Account Cert  Unit Name Currency Amount 
1924403 2017 ABCXYZ PFA96417 1 US CAD 25,167,555 
1924403 2017 ABCXYZ PFA96417 3 FR CAD 25,167,555.56 
1924403 2017 ABCXYZ PFA96417 4 DE CAD 25,167,555.56 

を何I私がMIN関数を使用するときに、ユニット値1のレコードを1つ戻したいのではなく、3つのレコードを取得しているという事実です。私はこの列を列で処理しており、追加レコードは金額列に追加すると表示されるように見えます。

私は私から*簡単な選択を行うには、次を得る:

Ref  YOA  Account Cert  Unit Name Currency Amount 
1924403 2017 ABCXYZ PFA96417 1 US CAD  25,167,555.00 
1924403 2017 ABCXYZ PFA96417 2 UK CAD  25,167,555.00 
1924403 2017 ABCXYZ PFA96417 3 FR CAD  25,167,555.56 
1924403 2017 ABCXYZ PFA96417 4 DE CAD  25,167,555.56 
1924403 2017 ABCXYZ PFA96417 5 AU CAD  25,167,555.56 
1924403 2017 ABCXYZ PFA96417 6 NZ CAD  25,167,555.56 

だから私はそのはポイントに、だけではない、私は必要な分単位の値に集約されている知っています。事前

+1

フォーマットチップをテーブルに参加することです。テキストをマークし、 '{}'をクリックしてください。 – jarlh

+0

あなたのグループのあなたの問題は、通貨別にグルーピングすることによって、3つのレコードを返すことになっていると思います。 –

+1

ユニット1が複数ある場合は、何を見たいですか? – Paddy

答えて

1

もう一つの方法は、それ自体で

select a.* from #TMP_Accounts a 
inner join (select min(unit) as minunit from #TMP_Accounts) b 
on a.Unit = b.minunit 
+0

完璧に働きました。ありがとうございます。 – Carlos80

2

おかげであなたは単位の最小数と行をしたい場合は、あなたが使用することができます。

select top (1) a.* 
from #TMP_Accounts a 
order by units; 

group byは間違いなくあなたの問題を引き起こしています。あなたがしたいことには適切ではないかもしれません。

+1

私はこのバージョンが好きです。あなたのテーブルがHEAPであることがうまくいけば*まれなシナリオのため、これはより良い/最高(これまでの回答から)良い結果を出します。 –

1

あなたの説明に基づいて、私はあなたがこのために探していると思う:

SELECT * 
FROM #TMP_Accounts 
WHERE Unit = (SELECT MIN(Unit) FROM #TMP_Accounts) 

同じ最小値との重複行のためにあなたがそれらの2行戻ってきますので、これは必ずしも、1行を返しません。しかし、このシナリオをどのように扱うべきかは、あなたの質問からは明らかではありません。適切な列の編集、タイプ: