SQL Server 2000 データベースに次のテーブルがあります。
主人
MasterID | Details | [other fields]
=====================================
PK (int) | Free text | ...
ログテーブル
LogID | MasterID | UserID | LogDate | LogText
==========================================================
PK (int) | FK (int) | VarChar(2)| Date stamp | Free text
マスター レコードごとに多くのログ エントリが存在する場合があります。
以下に示すように、各マスター行に関連する最新の 3 つのログ エントリを抽出するクエリがあります。LogData
連結を実現するために、適切な変換とフォーマットが実行されることに注意してください(明確にするために省略されています)。
SELECT
M.MasterID, M.Details, L.LogDate + L.UserID + L.LogText AS LogData
FROM
MasterTable M
INNER JOIN
LogTable L ON M.MasterID = L.MasterID
AND L.LogID IN (SELECT TOP 3 LogID FROM LogTable
WHERE MasterID = M. MasterID ORDER BY LogDate DESC)
これにより、次のような出力が生成されます。
MasterID | Details | LogData
========================================================
1 | First | 05/11/2012 AB Called Client
2 | Second | 08/11/2012 CD Client Visit
2 | Second | 07/11/2012 CD Called Client
2 | Second | 05/11/2012 AB Called Client
私が達成する必要があるのは、出力の列として 2 番目のテーブルのデータを表示することです。すべてのデータが単一のマスター レコードに対してレポートされるため、データの繰り返しを避けることができます。そのようです:
MasterID | Details | LogData1 | LogData2 | LogData3
===========================================================================================================
1 | First | 05/11/2012 AB Called Client | (null) | (null)
2 | Second | 08/11/2012 CD Client Visit | 07/11/2012 CD Called Client | 05/11/2012 AB Called Client
実際の要件では、このソリューションは、出力が約 20,000 行と 90 列のデータで構成される 5 つのテーブルのフラット化の一部になることに注意してください。
前もって感謝します。