2

我正在尝试执行以下 SQL:

SELECT * FROM Table2
INNER JOIN
    (SELECT * FROM Table1
    INNER JOIN
    (SELECT MAX(DateTime) AS LastMeasurement, MeasurementId as LastMeasurementId
    FROM Table1 GROUP BY MeasurementId) as lastMeasurement
    ON (Table1.MeasurementId = lastMeasurement.LastMeasurementId) 
    AND (Table1.DateTime = lastMeasurement.LastMeasurement)) as hLastMeasurement
ON Table2.Id = hLastMeasurement.Id
ORDER BY Table2.Id ASC

这很好用,但是因为我想获得 XML 格式的结果并且必须转换地理列,所以我将第一行更改为:

SELECT Name, Description, CAST(Location as nvarchar(MAX)) FROM Table2

并将这一行添加到末尾:

FOR XML RAW ('Object'), ROOT ('Objects'), ELEMENTS

现在我正在获取 XML,但仅包含来自 Table2 的数据。
欢迎任何建议。

4

1 回答 1

0

显然,如果要显示其他表中的数据,则必须像这样选择这些列。IO 通常使用 MYSQL,所以这是我通常使用的方式。但是如果您使用的是 oracle 或其他数据库,那么您必须选择正确的别名来显示您希望的自定义​​列。请参阅使用 sql server 连接的基本示例here

SELECT Table2.Name,Table2.Description,lastMeasurement.MeasurementId 

FROM Table2 t2
    INNER JOIN
        (SELECT * FROM Table1
        INNER JOIN
        (SELECT MAX(DateTime) AS LastMeasurement, MeasurementId as LastMeasurementId
        FROM Table1 GROUP BY MeasurementId) as lastMeasurement
        ON (Table1.MeasurementId = lastMeasurement.LastMeasurementId) 
        AND (Table1.DateTime = lastMeasurement.LastMeasurement)) as hLastMeasurement
    ON Table2.Id = hLastMeasurement.Id
    ORDER BY Table2.Id ASC
于 2012-03-29T08:44:32.763 回答