0

以下のクエリを考えると、サブクエリのwhere句を変更せずに、「Metadata」要素の下にある要素を「Event」要素の属性として持つことができますか(つまり、WHERE UniqueID = t1.UniqueID AND ID = MAX(t1。 ID))?

@EventTABLEを宣言します
((
    UniqueID VARCHAR(3)、
    ID INT、
    名前VARCHAR(25)、
    Latitude FLOAT、
    経度FLOAT、
    主キー(UniqueID、ID)
);
@Vehicle1テーブルを宣言する
((
    UniqueID VARCHAR(3)、
    ID INT、
    Column1 VARCHAR(25)
);
@Vehicle2テーブルを宣言する
((
    UniqueID VARCHAR(3)、
    ID INT、
    Column1 VARCHAR(25)
);

INSERT INTO @Event VALUES('ABC'、1、'LPR'、1.234、2.345)
INSERT INTO @Event VALUES('ABC'、2、'LPR'、2.234、3.345)
INSERT INTO @Event VALUES('ABC'、3、'LPR'、3.234、4.345)
INSERT INTO @Event VALUES('ABC'、4、'LPR'、4.234、5.345)

INSERT INTO @Event VALUES('DEF'、1、'LPR'、1.234、2.345)

INSERT INTO @Event VALUES('GHI'、1、'手動スキャン'、1.234、2.345)
INSERT INTO @Event VALUES('GHI'、2、'手動スキャン'、2.234、3.345)

INSERT INTO @ Vehicle1 VALUES('ABC'、1、'Plate#1')
INSERT INTO @ Vehicle1 VALUES('ABC'、1、'Plate#2')

INSERT INTO @ Vehicle2 VALUES('GHI'、1、'Plate#1')
INSERT INTO @ Vehicle2 VALUES('GHI'、2、'Plate#2')
INSERT INTO @ Vehicle2 VALUES('GHI'、3、'Plate#3')

選択する
    UniqueID AS UniqueID、

    (選択する
        ID、
        名前、
        緯度、
        経度
    FROM @Event
    WHERE UniqueID = t1.UniqueID AND ID = MAX(t1.ID)
    XML RAW('メタデータ')、ELEMENTS、TYPE)の場合、

    (選択する
        列1
    @Vehicle1から
    WHERE UniqueID = t1.UniqueID
    XML RAW('Row')、TYPE、ROOT('Vehicle1'))の場合、

    (選択する
        列1
    FROM @ Vehicle2
    WHERE UniqueID = t1.UniqueID
    XML RAW('Row')、TYPE、ROOT('Vehicle2')の場合)

FROM @Event t1
GROUP BY t1.UniqueID
XML RAW('イベント')、TYPE、ROOT('イベント')の場合


4

1 に答える 1

1

これを試して:

SELECT
    UniqueID        AS [@UniqueID],

    x.ID            AS [@ID],
    x.Name          AS [@Name],
    x.Latitude      AS [@Latitude],
    x.Longitude     AS [@Longitude],

    (SELECT
        Column1
    FROM @Vehicle1
    WHERE UniqueID = t1.UniqueID
    FOR XML RAW ('Row'), TYPE, ROOT ('Vehicle1')),

    (SELECT
        Column1
    FROM @Vehicle2
    WHERE UniqueID = t1.UniqueID
    FOR XML RAW ('Row'), TYPE, ROOT ('Vehicle2'))

FROM
(
    SELECT
        UniqueID,
        MAX(t1.ID) AS MaxID
    FROM
        @Event AS t1
    GROUP BY
        t1.UniqueID
) AS t1
CROSS APPLY
    (
        SELECT
            ID,
            Name,
            Latitude,
            Longitude
        FROM
            @Event 
        WHERE
            UniqueID = t1.UniqueID AND
            ID = t1.MaxID
    ) AS x
ORDER BY
    T1.UniqueID    
FOR XML PATH('Event'), TYPE, ROOT ('Events');
于 2011-03-24T22:35:47.900 に答える