0

それぞれに集計関数を使用して、2つの個別のselectステートメントがあります。結果を取り、それらを組み合わせられるようにしたいと思います。

table_a
id int
entered_date datetime (holds utc stamp)
balance money
group_id int

table_b
id int
entered_date date
balance money
transaction_type int

query 1: 
select convert(date,entered_date), sum(balance) as earned
from table_a
where group_id in (1, 2, 3, 4)
group by convert(date,entered_Date)

query 2: 
select convert(date,entered_date), sum(balance) as spent
where transaction_type = 2
group by convert(date,entered_Date)

results:
query 1:
2012-05-13, 5000
2012-05-14, 12000
...

query 2:
2012-05-13, 9000
2012-05-14, 55856
...

一時テーブルを使用せずに、レコードごとに1行を返したいと思います。結果セットには日付が含まれている必要があります。合計を取得するためにユニオンを使用して実行されているレポートがありますが、それは問題ありませんが、1つのレコードと獲得対ラインの結果セットを生成する必要があります。これに関するどんな助けもありがたいです。

4

4 に答える 4

0

試す:

;With AllDates AS
(
select convert(date,entered_date) As EnteredDate
    from table_a
    where group_id in (1, 2, 3, 4)
    group by convert(date,entered_Date)
UNION
select convert(date,entered_date)
    from table_b
    where transaction_type = 2
    group by convert(date,entered_Date)
)
, AllEarned AS (
select convert(date,entered_date) AS EnteredDate, sum(balance) as Earned
    from table_a
    where group_id in (1, 2, 3, 4)
    group by convert(date,entered_Date)
)
, AllSpent AS (
select convert(date,entered_date) AS EnteredDate, sum(balance) as Spent
    from table_b
    where transaction_type = 2
    group by convert(date,entered_Date)
)
SELECT
    d.EnteredDate, e.Earned, s.Spent
    FROM AllDates d
    LEFT OUTER JOIN AllEarned e ON d.EnteredDate=e.EnteredDate
    LEFT OUTER JOIN AllSpent s ON d.EnteredDate=s.EnteredDate
    ORDER BY 1,2,3
于 2012-05-17T02:56:04.800 に答える
0
SELECT 
       CASE WHEN a.a_date IS NULL THEN b.a_date ELSE a.a_date END as a_data, 
       a.earned,
       b.spent
FROM
    (select 
         convert(date,entered_date) as a_date, 
         sum(balance) as earned
    from table_a
    where group_id in (1, 2, 3, 4)
    group by entered_Date) A
FULL OUTER JOIN 
   (select 
        convert(date,entered_date) as a_date, 
        sum(balance) as spent
    from table_a
    where transaction_type = 2
    group by entered_Date) B 
ON A.a_date=b.a_date

またはFULL OUTER JOIN、両方の条件を満たさないデータがある場合に使用します。そして使用するCASE WHEN a.a_date IS NULL THEN b.a_date ELSE a.a_date END as a_data

于 2012-05-17T02:57:48.040 に答える
0

両方が同じテーブルからのものであると仮定して、ロジックを使用してこれらを組み合わせることができます(2番目のクエリにはfromステートメントがありません)。

select convert(date,entered_date),
       sum(case when group_id in (1, 2, 3, 4) then balance end) as earned,
       sum(case when transaction_type = 2 then balance end) as spend
from table_a
group by convert(date,entered_Date) 
于 2012-05-17T03:00:37.887 に答える
0

獲得額がtable_aからのものであり、支出額がtable_bからのものであると仮定すると、

; WITH a AS (
    select entered_date=convert(date,entered_date), balance as earned, 0 AS spent
    from table_a
    where group_id in (1, 2, 3, 4)
    UNION ALL
    select entered_date=convert(date,entered_date), 0 AS earned, balance as spent
    from table_b
    where transaction_type = 2
)
SELECT entered_date
, earned=SUM(earned)
, spent=SUM(spent)
FROM a
GROUP BY entered_date
于 2012-05-17T04:12:52.000 に答える