0

鉴于下面的查询,是否可以将“元数据”元素下的元素作为“事件”元素的属性,而不更改子查询的 where 子句(即 WHERE UniqueID = t1.UniqueID AND ID = MAX(t1. ID))?

声明@Event 表
(
    UniqueID VARCHAR(3),
    ID INT,
    名称 VARCHAR(25),
    纬度浮动,
    经度浮动,
    主键(唯一 ID,ID)
);
声明@Vehicle1 表
(
    UniqueID VARCHAR(3),
    ID INT,
    第 1 列 VARCHAR(25)
);
声明@Vehicle2 表
(
    UniqueID VARCHAR(3),
    ID INT,
    第 1 列 VARCHAR(25)
);

插入@Event 值('ABC'、1、'LPR'、1.234、2.345)
插入@Event 值('ABC'、2、'LPR'、2.234、3.345)
插入@Event 值('ABC'、3、'LPR'、3.234、4.345)
插入@Event 值('ABC'、4、'LPR'、4.234、5.345)

插入@Event 值('DEF'、1、'LPR'、1.234、2.345)

插入@Event VALUES ('GHI', 1, 'Manual Scan', 1.234, 2.345)
插入@Event VALUES ('GHI', 2, 'Manual Scan', 2.234, 3.345)

插入@Vehicle1 值('ABC',1,'Plate # 1')
插入@Vehicle1 值('ABC',1,'Plate #2')

插入@Vehicle2 值('GHI',1,'Plate # 1')
插入@Vehicle2 值('GHI', 2, 'Plate #2')
插入@Vehicle2 值('GHI',3,'Plate # 3')

选择
    唯一 ID 作为唯一 ID,

    (选择
        ID,
        姓名,
        纬度,
        经度
    来自@事件
    其中 UniqueID = t1.UniqueID AND ID = MAX(t1.ID)
    FOR XML RAW('元数据'),元素,类型),

    (选择
        第 1 列
    来自@Vehicle1
    在哪里 UniqueID = t1.UniqueID
    FOR XML RAW ('Row'), TYPE, ROOT ('Vehicle1')),

    (选择
        第 1 列
    来自@Vehicle2
    在哪里 UniqueID = t1.UniqueID
    FOR XML RAW ('Row'), TYPE, ROOT ('Vehicle2'))

来自@Event t1
按 t1.UniqueID 分组
FOR XML RAW ('Event')、TYPE、ROOT ('Events')


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 回答