如何将行转换为列

时间:2014-07-08 05:23:37

标签: sql sql-server sql-server-2008

我有两个表,我在每个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

1 个答案:

答案 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.这意味着您不需要枢轴,因为您已经可以直接从表中选择它们。

提供更多信息,我会更新此回复。