0

さまざまなテーブルの行データを列として表示するマトリックス レポートとして機能するビューを作成しています。連結によってこれを達成できると思いますが、少し行き詰まっています。私のクエリはうまく機能しますが、グリッドビューに表示される逆データテーブル (ピボットテーブル) を使用しています。現在取得しているのは、複数の値がすべて各セルに追加されていることです!

Set Name    James   Smith   Jones
Training 1      9       5       7
Training 2      5       7       8
Training 3     12      10       9

アウトプットしたいのはこれ!

Set Name    James    Smith     Jones
Training 1  3,1,2,3  2,3       5,2
Training 2  4,1      1,1,5     2,2,2,2 
Training 3  1,4,4,3  2,2,2,4   1,3,2,3

ユーザーとトレーニングの間に多対多の関係があります。これは、1 人のユーザーが特定の期間にわたって複数の結果を伴うトレーニングのインスタンスを多数持つことができるためです。

このuserProfilesTbl テーブルには、ASP.NET メンバーシップ、ロール、およびプロファイル テーブルからの追加のユーザー情報が格納されます。

•   PK UserId (int) 
•   StaffNo (varchar) 
•   forename (varchar) 
•   surname (varchar) 
•   FK st_id (int) 

このstoreTblテーブルは、グループ内のすべての店舗を参照します

•   PK st_id (int) 
•   store (varchar) 
•   storeNo (varchar) 
•   FK d_id (int) 

このshiftTbl表は、さまざまなシフト パターンを参照しています。

•   PK wa_id (int) 
•   Shift (varchar) 

このuserAssessmentTblテーブルには、ユーザー、実施されたトレーニング、およびそのトレーニングの結果に関する情報が保持されます。o_id は、1、2、3、または 4 の 1 つの値のみにすることができます

•   PK ti_id (int) 
•   FK UserId (UID) 
•   FK tt_id (int) 
•   o_id (int) 
•   n_id (int)

このsetTbl表は、各トレーニング コースの名前です。

•   PK s_id (int) 
•   setName (varchar) 
•   instruction (varchar) 
•   link (varchar) 
•   setNo (int) 

これは私の sql クエリ文字列ですLEFT JOIN。以下の SQL を使用してテーブルでプレーン を実行すると、1 人の人物に関連する複数の行が取得されます。

Dim query As String = "SELECT * 
                       FROM userProfilesTbl 
                       LEFT JOIN storeTbl ON userProfilesTbl.st_id = storeTbl.st_id 
                       LEFT JOIN shiftTbl ON userProfilesTbl.wa_id = shiftTbl.wa_id
                       LEFT JOIN userAssessmentTbl ON userProfilesTbl.UserId = userAssessmentTbl.UserId 
                       LEFT JOIN trainingTbl ON userAssessmentTbl.tt_id = trainingTbl.tt_id
                       LEFT JOIN setsTbl ON trainingTbl.s_id = setsTbl.s_id 
                       WHERE userProfilesTbl.st_id=@st_id 
                       AND userProfilesTbl.wa_id=@wa_id 
                       AND DATEPART(mm,t_date) = @m_date 
                       AND DATEPART(yyyy,t_date) = @y_date  
                       ORDER BY surname ASC"

何か案は?

4

0 に答える 0