2016-07-05 1 views
1

SQL Serverストアドプロシージャを書く際には何か助けが必要です。すべてのデータグループ:Train_B_NSQL Server:すべてのデータを1つの列でグループ化してください

my table data

期待される結果:私のクエリを間違っ

expecting output

 with CTE as 
     (
      select Train_B_N, Duration,Date,Trainer,Train_code,Training_Program 
      from Train_M 
      group by Train_B_N 
     ) 

     select 
      * 
     from Train_M as m 
     join CTE as c on c.Train_B_N = m.Train_B_N 

いただきましたか!?

+0

あなたは何をしていますか?どんな助けが必要ですか? –

+0

@ PM77-1編集済み。 – KyLim

+0

各グループにどの列を予約しますか? – Blank

答えて

0

GROUP BYはテーブルを一緒に破壊します。したがって、GROUPEDでない列を使用するとデータに問題が発生します。

select Train_B_N, Duration,Date,Trainer,Train_code,Training_Program 
      from Train_M 
      group by Train_B_N 

ANSI標準では、GROUP BYは集約関数ではありませんSELECT声明にあるすべての列を含める必要があります。例外なく。

WITH CTE AS (SELECT TRAIN_B_N, MAX(DATE) AS Last_Date 
FROM TRAIN_M 
GROUP BY TRAIN_B_N) 

SELECT A.Train_B_N, Duration, Date,Trainer,Train_code,Training_Program 
FROM TRAIN_M AS A 
INNER JOIN CTE ON CTE.Train_B_N = A.Train_B_N 
       AND CTE.Last_Date = A.Date 

この例では、そのIDで使用されている最後のトレーニングプログラム、トレーナー、train_codeが返されます。 これは、MAX(DATE) aggregate関数から実行されます。この関数は、テーブルに最大(最新)のDATEを保持します。また、GROUP BYは行を別のグループに分割したため、JOINは表の結果のサブセットのみを返します。

SQLはX #Matching_rowsを#table_rowsを返すことに注意してください、そして、あなたの#Matching_rows cardinalityが1より大きい場合は、余分な行を取得します。

ルックアップGROUP BY - MSDN。最初に構文例以外のものをすべて読んで、その節の目的が何であるかを解読することをお勧めします。

また、次回は、「GROUP BY、SQL」のような問題を尋ねるか、IDESSMSまたはそれ以外の場合)のエラーコードを挿入してください。あなたは何がうまくいくのかを理解する必要があります...そしてSOはあなたのGoogle検索エンジンではありません。 ;)

あなたはこれがSQLに関するすべてのことを学ぶことに興味を持っていることを願っています。 :D

関連する問題