繁体   English   中英

MSSQL-2个具有多行的表合并到一个表中

[英]MSSQL - 2 Tables with multiple rows merge in one table

我有2个选择返回2个表,每个表中有12行和2列,现在我只想拥有一个表。

---- First Table
    select f. date as Date, f.value as Month1 
        from
            (
                select b.date as date, sum(b.value) as value
                from business bu
                    join bus_cat buc on buc.id = bu.id
                    join cat ct on ct.id = buc.type_id
                    join bus2 b on b.id = buc.id
                where ct.id = 1
                    and b.value <> 0
                    and b.date between @start and @actual
                    and bu.name = @bu_name
                group by b.date, b.value

                union all

                select b5.date as date, sum(b5.value) as value
                from bus bu
                    join bus_cat buc on buc.id = bu.id
                    join cat ct on ct.id = buc.type_id
                    join bus3 b5 on b5.id = buc.id
                where ct.id = 1
                    and b5.value <> 0
                    and b5.date between @nextM and @endM
                    and bu.name = @bu_name
                group by b5.date, b5.value

            ) as f


---- Second Table   

        select f1. date as Date, f1.value as Month2 
        from
            (
                select b.date as date, sum(b.value) as value
                from business bu
                    join bus_cat buc on buc.id = bu.id
                    join cat ct on ct.id = buc.type_id
                    join bus2 b on b.id = buc.id
                where ct.id = 1
                    and b.value <> 0
                    and b.date between @start and @actual
                    and bu.name = @bu_name
                group by b.date, b.value

                union all

                select b5.date as date, sum(b5.value) as value
                from bus bu
                    join bus_cat buc on buc.id = bu.id
                    join cat ct on ct.id = buc.type_id
                    join bus3 b5 on b5.id = buc.id
                where ct.id = 1
                    and b5.value <> 0
                    and b5.date between @nextM and @endM
                    and bu.name = @bu_name
                group by b5.date, b5.value

            ) as f1

第一个表的实际输出为:

Date                Month1
2015-01-01        23
2015-01-01        77

第二:

Date                Month2
2015-01-01        88
2015-01-01        90

我想要的就是合并这两个表,看起来像

   Date                Month1      Date                Month2
    2015-01-01        23         2015-01-01             77          
    2015-01-01        28         2015-01-01             787

正如我在评论中所说,简单的联接应该可以解决问题。 就像是:

SELECT      *
FROM        
            (
                select b.date as date, sum(b.value) as value
                from business bu
                    join bus_cat buc on buc.id = bu.id
                    join cat ct on ct.id = buc.type_id
                    join bus2 b on b.id = buc.id
                where ct.id = 1
                    and b.value <> 0
                    and b.date between @start and @actual
                    and bu.name = @bu_name
                group by b.date, b.value

                union all

                select b5.date as date, sum(b5.value) as value
                from bus bu
                    join bus_cat buc on buc.id = bu.id
                    join cat ct on ct.id = buc.type_id
                    join bus3 b5 on b5.id = buc.id
                where ct.id = 1
                    and b5.value <> 0
                    and b5.date between @nextM and @endM
                    and bu.name = @bu_name
                group by b5.date, b5.value

            ) as f
LEFT JOIN   (
                select b.date as date, sum(b.value) as value
                from business bu
                    join bus_cat buc on buc.id = bu.id
                    join cat ct on ct.id = buc.type_id
                    join bus2 b on b.id = buc.id
                where ct.id = 1
                    and b.value <> 0
                    and b.date between @start and @actual
                    and bu.name = @bu_name
                group by b.date, b.value

                union all

                select b5.date as date, sum(b5.value) as value
                from bus bu
                    join bus_cat buc on buc.id = bu.id
                    join cat ct on ct.id = buc.type_id
                    join bus3 b5 on b5.id = buc.id
                where ct.id = 1
                    and b5.value <> 0
                    and b5.date between @nextM and @endM
                    and bu.name = @bu_name
                group by b5.date, b5.value

            ) as f1
        ON  f.date = f1.date

编辑

顺便说一下,可以简化此查询,看起来查询中有很多相似之处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM