2013-05-08 120 views
0

我有两条select语句。第一个select返回2012年前一年的数据,而第二个select显示当前年份。我将如何加入这两个来获得我想要的输出。在sql中加入两条select语句

select a.id, b.item, a.sum(qty) as 'yr1qty', a.yr1amt from table A 
left join table B on a.code = b.code 
where date between '04/01/2012' and '04/07/2012' 
group by a.id, b. item 

select a.id, b.item, a.sum(qty) as 'yr2qty', a.yr2amt from table A 
left join table B on a.code = b.code 
where date between '04/01/2013' and '04/07/2013' 
group by a.id, b. item 

所需的输出:

id item  yr1qty y1amt  yr2qty yr2amt 

01 item01  20  2000.00  5  500.00 
02 item02       8  400.00 
03 item03  10  1250.00 
04 item04  3  60.00  2  40.00 
05 item05       8  400.00 
+1

是真的a.y1amt还是它总和(a.qty)为yr1amt? – 2013-05-08 10:55:51

回答

1

为使用子查询全外,您应该能够加入两个连接

select 
    coalesce(a.id,b.id), 
    coalesce(a.item,b.item), 
    yr1qty, 
    yr1amt, 
    yr2qty, 
    yr2amt 
from 
    (
    select a.id, b.item, a.sum(qty) as 'yr1qty', a.yr1amt from table A 
    left join table B on a.code = b.code 
    where date between '04/01/2012' and '04/07/2012' 
    group by a.id, b. item) as a 
    full outer join 
    (
    select a.id, b.item, a.sum(qty) as 'yr2qty', a.yr2amt from table A 
    left join table B on a.code = b.code 
    where date between '04/01/2013' and '04/07/2013' 
    group by a.id, b. item 
    ) as b on a.id = b.id 
+0

非常感谢您的帮助。我想到了。我有你的建议Robb,但改为左连接,而不是全外连接。 godbless all – user1840952 2013-05-08 11:07:58

0

你需要两个?这是一个查询的结果...

select a.id, b.item, 
a.sum(
    CASE WHEN date between '04/01/2012' and '04/07/2012' 
     THEN qty 
     ELSE 0 
    END) AS 'yr1qty', a.yr1amt, 
a.sum(
    CASE WHEN date between '04/01/2013' and '04/07/2013' 
     THEN qty 
     ELSE 0 
    END) AS 'yr2qty', a.yr2amt 
from table A 
left join table B on a.code = b.code 
group by a.id, b.item 
0

您是否需要使用数据透视表?

select id,item, yr1qty,yr1amt, yr2qty, yr2amt from 
(
select a.id, b.item, a.qty, a.amt, 
    case 
     when [date] between '2012-01-04' and '2012-07-01' then 'yr1qty' 
     when [date] between '2013-01-04' and '2013-07-01' then 'yr2qty' 
     else 'oor' 
    end as yrqty, 
    case 
     when [date] between '2012-01-04' and '2012-07-01' then 'yr1amt' 
     when [date] between '2013-01-04' and '2013-07-01' then 'yr2amt' 
     else 'oor' 
    end as yramt 



from A 
left join B on a.code = b.code 
) x 
pivot (
    sum(qty) for yrqty in ([yr1qty],[yr2qty]) 
) qtyTotal 
pivot (
    sum(amt) for yramt in ([yr1amt],[yr2amt]) 
) amtTotal 
+0

感谢爵士的建议,我很满意罗伯先生的想法。不管怎么说,还是要谢谢你 :) – user1840952 2013-05-08 11:57:04