2017-09-20 17 views
1

私は、各名前の下に重複する行があるように、各名前に入力されたすべての数字をまとめた毎日の図を計算しました。結果はユーザーごとに1つしか表示されないようにしたいので、私は別個のものを使用するのが最善であると考えました。しかし、私はまた、図を降順で結果を表示する必要があります。これは同じ声明のなかで可能ですか?ORDER BYとDISTINCTは同じselectステートメントで

SELECT DISTINCT 
    D.DATE, 
    COALESCE(M.[Team ADJ],D.[Team ADJ], M.[Name]) AS 'Sales Person', 
    COALESCE(D.[Team], M.[Team]) AS 'Sales Team', 
    isnull(D.[Daily Figure],0) AS [Daily Figure], 

    FROM 
    [Daily] D 
    FULL OUTER JOIN 
    [Month] M ON D.[Name] = F.[Name] 
    ORDER BY [Daily Figure] DESC 

現在の結果

Date  Sales Person Sales Team  Daily Figure Month 
2017-09-19  FRED   SAM    20   285 
2017-09-19  FRED   SAM    20   285 
2017-09-19  FRED   SAM    20   285 
2017-09-19  TOM   BEN    140   118 
2017-09-19  TOM   BEN    140   118 

ERROR: 'SELECT DISTINCTが指定されている場合はORDER BY項目が選択リストに表示されなければなりません。'私はorder byセクションで、選択リスト

+0

「SELECT」に値が1つもない場合、結果に「Date」列があるのはなぜですか?さもなければあなたのクエリーはうまく動作するは –

+0

名前だけで参加すると、例えば、3つの「月間」レコードを取得し、90の「毎日」は、その1つの名前の270行の結果を記録します。これは意図されていますか?あなたの結果にあなたが見たいものを考えてください。名前と月ごとに1つのレコード?名前と日ごとに1つのレコード?名前ごとに1つのレコード? 「Date」、「Daily Figure」、「Month」の列には何が含まれていますか? –

+3

"私は' DISTINCT'が必要ですが、... "は通常、あなたが探しているべきことの手がかりです)最初に重複した結果が出る理由、そして/またはb)実際に' GROUP BY'と代わりに集約します。現時点では、これが(a)か(b)の状況かどうかは私には不明です。 –

答えて

0

この問題を解決する最良の方法は、列番号の位置で注文することです。例えば。列が4番目の「order by 4」にある場合

SELECT DISTINCT 
COALESCE(M.[Team ADJ],D.[Team ADJ], M.[Name]) AS 'Sales Person', 
COALESCE(D.[Team], M.[Team]) AS 'Sales Team', 
isnull(D.[Daily Figure],0), 

FROM 
[Daily] D 
FULL OUTER JOIN 
[Month] M ON D.[Name] = F.[Name] 
ORDER BY 4 DESC 
+0

保存された生産コードで列序数による注文を控えてください。後で誰かがコードを変更したときに、障害の原因となる可能性があります。しかし、私は一度だけ実行クエリでそれらを使用します。 –

1

にそれが含まれているにもかかわらず、あなたは例えば、その別名で列を参照することができます。

select distinct 
    [Date] 
    , coalesce(M.[Team adj],D.[Team adj], M.[Name]) as [Sales Person] 
    , coalesce(D.[Team], M.[Team]) as [Sales Team] 
    , isnull(D.[Daily Figure],0) as [Daily Figure] 
    , [Month] 
from [Daily] D 
    full outer join [Month] M 
    on D.[Name] = F.[Name] 
order by [Daily Figure] desc 


ソーステーブルなしでクエリを構築するために、ここにあります

select distinct 
    t.Date, 
    [Sales Person], 
    [Sales Team], 
    isnull(t.[Daily Figure],0) AS [Daily Figure] 
from t 
order by [Daily Figure] desc 

rextesterデモ:上記のあなたのサンプルを使用してデモhttp://rextester.com/PVPHSR35614

から返されます。

+------------+--------------+------------+--------------+ 
| Date | Sales Person | Sales Team | Daily Figure | 
+------------+--------------+------------+--------------+ 
| 2017-09-19 | tom   | ben  |   140 | 
| 2017-09-19 | fred   | sam  |   20 | 
+------------+--------------+------------+--------------+ 
+0

エラー 'SELECT DISTINCTが指定されている場合は、ORDER BY項目が選択リストに表示されている必要があります。'私はそれを選択リストに含めました –

0

サンプルクエリは、あなたが投稿した最新の結果を生成しませんでした。

Distinct Order Byでは、order列は結果セットの一部でなければなりません。サンプルクエリでは、Daily Figureという名前の列はありません。 Daily Figureが式なしで使用された場合、Order Byは正常に動作します。しかし、それを式にラップすると、それはもはやDaily Figureという名前にはなりません。

最も簡単な解決策は、列のエイリアスを作成することです。ここで

, isnull(D.[Daily Figure],0) as [Daily Figure] 

*更新*

は、アクションですることで重複しない注文を示す任意のSQL Server上で実行することができますスニペットです。

SELECT DISTINCT 
      t.type_desc, 
      CAST(t.create_date AS DATE) AS Created 
    FROM  sys.tables AS t 
    ORDER BY Created 
; 
+0

私はエイリアスでこれを試しましたが、SQLサーバでは機能しません –

+0

あなたの質問に投稿した質問文を更新してください。私たちには欠けているものがあります。私はDistinct Order Byを何度も使ってきました。そのルールはかなり簡単です。 –

+0

これはコードlolです。私は注文3と一緒に使用して、それは正常に動作します –

関連する問題