2014-07-08 51 views
0

我有两个表我得到了每个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 
+2

请查看SQL –

+0

中的'PIVOT'关键字,如果两个表具有相同的ID,则可以使用'Join'而不是'Union'。 – Baalthasarr

+0

@Baalthasarr你是什么意思相同ids.two表有一对多的关系.table 2包含table1 id – user3777928

回答

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应该来自..枢轴将被用于把行转换成列,但我没有看到这些行来自于你的榜样。

另外,您可以直接从示例中的tabl2中选择X/Y。这意味着您不需要数据透视表,因为您可以直接从表中选择它们。

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