TRANSFORM ステートメントの使用例

次の例では、SQL TRANSFORM 句を使用して、1994 年の各四半期における個々の社員からの注文数を表示するクロス集計クエリを作成します。このプロシージャを実行するためには SQLTRANSFORMOutput 関数が必要です。

Sub TransformX1()

    

    Dim dbs As Database

    Dim strSQL As String

    Dim qdfTRANSFORM As QueryDef

    

    strSQL = "PARAMETERS prmYear SHORT; TRANSFORM " _

        & "Count(OrderID) " _

        & "SELECT FirstName & "" "" & LastName AS " _

        & "FullName FROM Employees INNER JOIN Orders " _

        & "ON Employees.EmployeeID = " _

        & "Orders.EmployeeID WHERE DatePart " _

        & "(""yyyy"", OrderDate) = [prmYear] "

    

    strSQL = strSQL & "GROUP BY FirstName & " _

        & """ "" & LastName " _

        & "ORDER BY FirstName & "" "" & LastName " _

        & "PIVOT DatePart(""q"", OrderDate)"

    

    ' この下の行を、使用しているコンピュータ上の

    ' Northwind のパスに変更してください。

    Set dbs = OpenDatabase("Northwind.mdb")

    

    Set qdfTRANSFORM = dbs.CreateQueryDef _

        ("", strSQL)

    

    SQLTRANSFORMOutput qdfTRANSFORM, 1994

    

    dbs.Close

    

End Sub

    

次の例では、SQL TRANSFORM 句を使用して、1994 年の各四半期における個々の社員からの注文の合計金額を表示する、やや複雑なクロス集計クエリを作成します。このプロシージャを実行するためには SQLTRANSFORMOutput 関数が必要です。

Sub TransformX2()

    

    Dim dbs As Database

    Dim strSQL As String

    Dim qdfTRANSFORM As QueryDef

    

    strSQL = "PARAMETERS prmYear SMALLINT; TRANSFORM " _

        & "Sum(Subtotal) SELECT FirstName & "" """ _

        & "& LastName AS FullName " _

        & "FROM Employees INNER JOIN " _

        & "(Orders INNER JOIN [Order Subtotals] " _

        & "ON Orders.OrderID = " _

        & "[Order Subtotals].OrderID) " _

        & "ON Employees.EmployeeID = " _

        & "Orders.EmployeeID WHERE DatePart" _

        & "(""yyyy"", OrderDate) = [prmYear] "

    

    strSQL = strSQL & "GROUP BY FirstName & "" """ _

        & "& LastName " _

        & "ORDER BY FirstName & "" "" & LastName " _

        & "PIVOT DatePart(""q"",OrderDate)"        

        

    ' この下の行を、使用しているコンピュータ上の

    ' Northwind のパスに変更してください。

    Set dbs = OpenDatabase("Northwind.mdb")

    

    Set qdfTRANSFORM = dbs.CreateQueryDef _

        ("", strSQL)

    

    SQLTRANSFORMOutput qdfTRANSFORM, 1994

    

    dbs.Close

    

End Sub

    

Function SQLTRANSFORMOutput(qdfTemp As QueryDef, _

    intYear As Integer)

    

    Dim rstTRANSFORM As Recordset

    Dim fldLoop As Field

    Dim booFirst As Boolean

    

    qdfTemp.PARAMETERS!prmYear = intYear

    Set rstTRANSFORM = qdfTemp.OpenRecordset()

    

    Debug.Print qdfTemp.SQL

    Debug.Print

    Debug.Print , , "Quarter"

    

    With rstTRANSFORM

        booFirst = True

        For Each fldLoop In .Fields

            If booFirst = True Then

                Debug.Print fldLoop.Name

                Debug.Print , ;

                booFirst = False

            Else

                Debug.Print , fldLoop.Name;

            End If

        Next fldLoop

        Debug.Print

        

        Do While Not .EOF

            booFirst = True

            For Each fldLoop In .Fields

                If booFirst = True Then

                    Debug.Print fldLoop

                    Debug.Print , ;

                    booFirst = False

                Else

                    Debug.Print , fldLoop;

                End If

            Next fldLoop

            Debug.Print

            .MoveNext

        Loop

    End With

    

End Function