我有两个表,我在每个id上获得了最大和最小记录。我有以下查询和输出
SELECT s.Id, tabl2.X, tabl2.Y
FROM (SELECT MAX(tabl2.Id) AS tbl2Id, tabl1.Id
FROM tabl2 INNER JOIN
tabl1 ON tabl2.Id = tabl1 .Id
WHERE (CONVERT(date, tabl2.date) = CONVERT(date, GETDATE() - 1)) and tabl1.Id=1
GROUP BY tabl1.Id
UNION
SELECT MIN(tabl2.Id) AS tbl2Id, tabl1.Id
FROM tabl2 INNER JOIN
tabl1 ON tabl2.Id= tabl1.Id
WHERE (CONVERT(date, tabl2.date) = CONVERT(date, GETDATE() - 1)) AND and tabl1.Id=1
GROUP BY tabl1.Id) AS s INNER JOIN
tabl2 ON s.Id= tabl2.Id
Id X Y
1 73.1102528 33.545264
1 74.1240448 32.2604704
但我希望像这样输出
Id X Y X1 Y2
1 73.1102528 33.545264 74.1240448 32.2604704
答案 0 :(得分:0)
我认为您可以简化查询,最小/最大可以进入单个语句,因为它们被分组在相同的ID上。如下:
select s.id, tabl2.x, tabl2.y
from (
select max(tabl2.id) as tbl2id_max, min(tabl2.id) as tbl2id_min, tabl1.id
from tabl2
inner join tabl1 on tabl2.id = tabl1 .id
where (convert(date, tabl2.date) = convert(date, getdate() - 1))
and tabl1.id = 1
group by tabl1.id
) as s inner join tabl2 on s.id= tabl2.id
从你的例子中可以清楚地知道X1和Y1应该来自哪个.. Pivot将用于将行转换为列,但我没有看到这些行来自你的示例。
此外,您直接从示例中的tabl2中选择X / Y.这意味着您不需要枢轴,因为您已经可以直接从表中选择它们。
提供更多信息,我会更新此回复。