2013-12-11 18 views
1

我有幾個表,我將它們連接在一起並從中選擇各種列和總和,並且我想結合select語句以便所有結果都在相同的結果集中。 我現在有喜歡的查詢:在同一個查詢結果集中使用不同where子句的多重總和

declare @year INT 
declare @month INT 
set @year = '2013' 
set @month = '08' 

select CAST(LEFT(b.name, 3) AS varchar(3))AS Region, a.model, sum(a.Number)AS Uniques 
from Table1 a 
inner join database2.....table2 b 
on a.code = b.code 
where Year(a.EventDate) = @year 
and Month(a.EventDate) = @month 
and a.make='Toyota' 
group by CAST(LEFT(b.name, 3) AS varchar(3)), a.model 
order by CAST(LEFT(b.name, 3) AS varchar(3)) 

這帶來了一個數據集,看起來是這樣的:

Region Model Uniques 
EST  Toyota  200 
EST  Honda  350 
CEN  Toyota  220 
CEN  VW   150 

然後我有另一個類似的查詢,但使用不同的表和要求:

select CAST(LEFT(c.name, 3) AS varchar(3)) AS Region, a.Model, sum(b.Number)As Sales 
from Table1 a 
left join Table3 b 
on a.leadid = b.leadid 
inner join Database1..Table2 c 
on a.code = c.code 
where Year(a.EventDate) = @year 
and Month(a.EventDate) = @month 
and a.make='Toyota' 
group by a.Model, CAST(LEFT(c.Name, 3) AS varchar(3)) 
order by CAST(LEFT(c.Name, 3) AS varchar(3)) 

這帶來了類似的結果集:

Region  Model  Sales 
    EST  Toyota  150 
    CEN  VW   80 
    CEN  Toyota  75 

我只想配對這些結果或進行連接查詢,這樣我就可以得到類似的結果;

Region Model  Uniques Sales 
EST  Toyota  200   150 
EST  Honda  350   0 
CEN  Toyota  220   75 
CEN  vW   150   80 

總共有20-30個地區/模型的組合,它們對於每個結果集都是相同的。

回答

2

好吧,如果你不能做到這一切在一個查詢中,那麼你可以簡單地加入2個查詢一起:

select 
t1.region, 
t1.model, 
t1.uniques, 
t2.sales 
from 
(select CAST(LEFT(b.name, 3) AS varchar(3))AS Region, a.model, sum(a.Number)AS Uniques 
from Table1 a 
inner join database2.....table2 b 
on a.code = b.code 
where Year(a.EventDate) = @year 
and Month(a.EventDate) = @month 
and a.make='Toyota' 
group by CAST(LEFT(b.name, 3) AS varchar(3)), a.model 
order by CAST(LEFT(b.name, 3) AS varchar(3)) 
) t1 
inner join 
(
select CAST(LEFT(c.name, 3) AS varchar(3)) AS Region, a.Model, sum(b.Number)As Sales 
from Table1 a 
left join Table3 b 
on a.leadid = b.leadid 
inner join Database1..Table2 c 
on a.code = c.code 
where Year(a.EventDate) = @year 
and Month(a.EventDate) = @month 
and a.make='Toyota' 
group by a.Model, CAST(LEFT(c.Name, 3) AS varchar(3)) 
order by CAST(LEFT(c.Name, 3) AS varchar(3)) 
) t2 
on t1.region = t2.region 
and t1.model = t2.model 
+0

感謝這個答案完美的作品。我這樣做,然後從原始查詢中取出ORDER BY並獲得了我的結果集。 –

+1

+1,但它可能需要'FULL JOIN'和NULL處理來獲得來自兩個子查詢的所有結果 – GarethD

+0

是的,我只是做了LEFT OUTER JOIN而不是內部連接,然後在我的select語句中是:SELECT t1.region,t1。模型,t1.uniques,isnull(t2.sales,0)AS銷售 –

1

使用這一概念:

SUM (CASE WHEN ConditionIsMet THEN Column1 ELSE 0 END), 
SUM (CASE WHEN OtherCondIsMet THEN Column2 ELSE 0 END) 
相關問題