2013-08-06 143 views
0

我有两个要合并的查询,因此我可以将结果绘制为图表。 结果必须是非常具体的或图表将无法正常显示加入两个查询,以便第二个查询成为查询结果中的一个行1

我在水晶使用MS SQL报告中的信息11

下面是我要找的结果。

 
    Date  Invoice Type  Amount 
     2012/08 Customer Payment  500 
     2012/08 Customer Invoice  1000 
     2012/08 Moving Balance  1500 
     2012/09 Customer Invoice  400 
     2012/09 Moving Balance  1900 
     2012/10 Interest    50 
     2012/10 Moving Balance  1950 

所以第一个查询返回的结果如下

 
    Date  Invoice Type  Amount 
     2012/08 Customer Payment  500 
     2012/08 Customer Invoice  1000 

     2012/09 Customer Invoice  400 

     2012/10 Interest    50 

和第二查询返回

 
    Date  Invoice Type  Amount 

     2012/08 Moving Balance  1500 
     2012/09 Moving Balance  1900 
     2012/10 Moving Balance  1950 

第二个查询是非常漫长而复杂的一个加盟。 什么是连接这两个查询 的最好方式,使我有一个名为发票类型(如图表是基于该场)

一列,覆盖了所有发票类型再加上运动平衡

+1

这听起来像你想将两个查询的结果联合起来?有关概述,请参阅http://technet.microsoft.com/en-us/library/ms180026.aspx。 – dash

回答

0

我假设结果集中Moving Balance行的位置很重要。

你可以做这样的事情:

select date, invoice_type, amount 
from 
(
    select date, invoice_type, amount from query1 
    union all 
    select date, invoice_type, amount from query2 
) 
order by date, case invoice_type when 'Moving Balance' then 1 else 0 end 

这首先附加第二查询到的第一个查询结果的结果,然后通过在发票类型按日期先重新排序结果列表,然后移动平衡的行将最后到达。


随着你给的实际查询,就应该是这个样子:

select date, invoice_type, amount 
from 
(
    SELECT 
     CONVERT(VARCHAR(7),case_createddate, 111) AS Date, 
     case_invoicetype as invoice_type, 
     Sum(case_totalexvat) as amount 
    FROM cases AS ca 
    WHERE case_primaryCompanyid = 2174 and 
    datediff(m,case_createddate,getDate()) 

    union all 

    select 
     CONVERT(VARCHAR(7),ca.case_createddate, 111) AS Date, 
     'Moving Balance' as Invoice_Type, 
     sum(mb.Amount) as Amount 
    from 
     cases as ca 
     left join (
      select 
       case_primaryCompanyId as ID, 
       case_createdDate, 
       case_TotalExVat as Amount 
      from 
       cases 
     ) mb 
     on ca. case_primaryCompanyId = mb.ID 
     and ca.case_createdDate >= mb.case_CreatedDate 
    where 
     ca.case_primaryCompanyId = 2174 and 
     ca.case_createdDate > DATEADD(m, -12, current_timestamp) 
    group by 
     case_primaryCompanyId, 
     CONVERT(VARCHAR(7),ca.case_createddate, 111) 
    order by ca.case_primaryCompanyid, CONVERT(VARCHAR(7),ca.case_createddate, 111) 
) 
order by date, case invoice_type when 'Moving Balance' then 1 else 0 end 
+0

我已经在下面的代码,但它不会接受它,并不断给我下面的错误“附近的语法不正确)'”select * from(query 1 union all query 2)查看上面的查询 – Rachsherry

+0

@Rachsherry:请参阅更新。 –

+0

谢谢丹尼尔,我今天在昏昏欲睡的模式,这是完美的 – Rachsherry

0

您可以使用联盟,并且可以通过子句中使用顺序

Select * from (Query 1 
Union 
     Query 2 
) as a Order by a.Date Asc 
相关问题