0

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 つのテーブルのフラット化の一部になることに注意してください。

前もって感謝します。

4

1 に答える 1