0

結果からグラフを作成できるように、結合したい 2 つのクエリがあります。結果は非常に具体的である必要があります。そうしないと、グラフに情報が正しく表示されません

Crystal Reports 11 で MS SQL を使用しています

以下は私が探している結果です。

         日付 請求書の種類 金額 
         2012/08 顧客支払 500
         2012/08 顧客請求書 1000
         2012/08 ムービングバランス1500
         2012/09 顧客請求書 400
         2012/09 ムービングバランス 1900
         2012/10 利息 50
         2012/10 ムービングバランス 1950

したがって、最初のクエリは次の結果を返します

         日付 請求書の種類 金額 
         2012/08 顧客支払 500
         2012/08 顧客請求書 1000

         2012/09 顧客請求書 400

         2012/10 利息 50

そして2番目のクエリは戻ります

         日付 請求書の種類 金額 

         2012/08 ムービングバランス1500
         2012/09 ムービングバランス 1900
         2012/10 ムービングバランス 1950

2 番目のクエリは非常に長く、結合が複雑です。これら 2 つのクエリを結合して、invoice Type という 1 つの列を作成するにはどうすればよいですか (グラフはこのフィールドに基づいているため)。

すべての請求書タイプと移動残高をカバーする

4

2 に答える 2

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

これは、最初のクエリの結果に 2 番目のクエリの結果を最初に追加し、結果のリストを最初に日付で並べ替え、次に請求書の種類で並べ替えて、移動残高の行が最後になるようにします。


与えられた実際のクエリでは、次のようになります。

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
于 2013-08-06T10:43:43.627 に答える
0

Unionを使用でき、Order by句を使用できます

Select  * from (Query 1
Union
        Query 2
)  as a Order by a.Date Asc
于 2013-08-06T10:44:30.330 に答える