2016-08-19 15 views
-1

の報告書を作成し、これらの列が含まれているSpeakerSessionsと呼ばれる:私が欲しいものSQL Serverの私はテーブルを持っている電子メール

Created - datetime 
Processed - float (boolean) 
Dateprocessed - datetime 
Conference - varchar 
Session - varchar 
FDBue - datetime 
Speaker - varchar 
Email - varchar 
Type - varchar 
ID - int 

は、スピーカーがで提示しているもののセッションは私が表示されます、クエリ、レポート、またはビューであります

speaker conference  session  fbdue 
----------------------------------------------------- 
Joe   Conf1  SessionA 1/1/2010 
      Conf1  SessionB 1/1/2010 
      Conf2  SessionE 1/10/2010 
Amy   Conf1  SessionA 1/3/2010 
      Conf2  SessionB 1/3/2010 

これはどのようにしてSQL Serverで実現できますか? ID列はID列です。同じスピーカーが会議で複数のセッションで話すことができます。

+0

スピーカーの行が1回だけ表示され、複数のJoe'sとAmy'sがないことをお探しですか? – Zi0n1

+0

@ Zi0n1はい!まったく。スピーカーを一度表示してから会議とセッションを同じ行に表示し、それ以降の行数を必要とします。 – z0nia

+0

これは簡単な 'select'です。あなた自身でこれをやろうとしたことがありますか? – shawnt00

答えて

0
select 
    case 
     when row_number() over (
       partition by coalesce(speaker, email) 
       order by conference, session 
      ) = 1 
     then coalesce(speaker, email) 
    end as speaker, 
    conference, session, fbdue 
from SpeakerSessions 
order by coalesce(speaker, email), conference, session; 

この問題は、一連の行のうちの最初の行を知ることになります。そのような情報は、行自体を調べることで判断することはできません。

他の行を見渡すことは、基本的にどのような分析/ウィンドウ関数が対象ですか。 row_number()は、指定された順序で一連の行に番号を付けるものです。 partition byは、各スピーカーへの番号付けを制限し、次のスピーカーでリセットすることができます。 order byも重要であり、照会結果のorder byspeaker以降)と多く一致します。

最終的には次のようになります。最初の行にいる場合は、スピーカーの名前を返し、そうでない場合はnull(空白)を返します。これをどのように使用するかに応じて、デフォルトのnullではなくelse ''の空の文字列を返すことをお勧めします。

多くのレポートツールには、このロジックを処理するための「反復値の抑制」オプションがあります。スプレッドシートにデータを取り込む場合は、前のセルを表示する数式でExcelでこれを行うことも簡単です。

+0

うわー、それは私が探しているものとほぼ同じです! Nullsが最初に表示されていたので、スピーカー名の代わりに電子メールで注文する必要がありました。しかし、私がこれを実行するときに、重複があってはならないときはあります。各スピーカーは一度表示されますが、会議セッションが重複しています-fbdue – z0nia

+0

@ z0niaこのクエリでは、データにまだ存在していない重複を導入する方法はありません。私はいくつかの列がdupsであると思われるかもしれないと思っていますが、それらは予想された順序からシャッフルする必要があります。データを見ずに推測するのは難しいです。おそらく 'row_number()'は最後の 'order by'と一致しません。 – shawnt00

+0

SpeakerSessionsテーブルには、1つの会議でプレゼンテーションを行い、1つのセッションのみを行うスピーカーが1人います。クエリ結果には、speakerA-confA-sessionA-fbdueが表示されます。その直下の行は、スピーカーがヌル以外の同じ正確なものを示しています:null -confA-sessionA-fbdue – z0nia

関連する問題