0

次のようなテーブルがありincomeます。

date              income      
---------------------------
09/05/13          56000    
09/05/13          66600
09/05/13          50000

そして、expense次のような表があります。

date              expense 
----------------------------
09/05/13          68800

出力が次のようなクエリを書きたいと思います。

date              income             expense 
---------------------------------------------
09/05/13          56000              68800
09/05/13          66600
09/05/13          50000
4

1 に答える 1

3

UPDATE2:収入の値が費用の値と一致する特定の順序に関心がない場合は、次のようなクエリで目的の出力を得ることができます

SELECT date, 
       MAX(CASE WHEN type = 1 THEN amount END) income,
       MAX(CASE WHEN type = 2 THEN amount END) expense
  FROM
(
  SELECT 1 type, date, income amount, @n := IF(@g = date, @n + 1, 1) rnum, @g := date g
    FROM income CROSS JOIN (SELECT @n := 0, @g := NULL) i1
   UNION ALL
  SELECT 2, date, expense amount, @m := IF(@f = date, @m + 1, 1) rnum, @f := date g
    FROM expense CROSS JOIN (SELECT @m := 0, @f := NULL) i2
) q
 GROUP BY date, rnum

出力:

| | 日付 | 収入 | 費用 |
|--------------------|--------|---------|
| | 2013 年 9 月 5 日 | 56000 | 68800 |
| | 2013 年 9 月 5 日 | 66600 | (ヌル) |
| | 2013 年 9 月 5 日 | 50000 | (ヌル) |

これがSQLFiddleのデモです


UPDATE1: 次のようなクエリを使用して、1 日あたりの収入と支出をグループ化するのは理にかなっているようです。

SELECT a.date, i.income, e.expense
  FROM
(
  SELECT date
    FROM income
  UNION
  SELECT date
    FROM expense 
) a LEFT JOIN 
(
  SELECT date, SUM(income) income
    FROM income
   GROUP BY date
) i
    ON a.date = i.date LEFT JOIN 
(
  SELECT date, SUM(expense) expense
    FROM expense
   GROUP BY date
) e
    ON a.date = e.date

出力:

| | 日付 | 収入 | 費用 |
|--------------------|--------|---------|
| | 2013 年 9 月 5 日 | 172600 | 68800 |

これがSQLFiddleのデモです


元の質問に対する元の回答: 元の質問FULL OUTER JOINで述べたように(date列の上に)が必要な場合は、これで十分です。

SELECT a.date, i.income, e.expense
  FROM
(
  SELECT date
    FROM income
  UNION
  SELECT date
    FROM expense 
) a LEFT JOIN income i
    ON a.date = i.date LEFT JOIN expense e
    ON a.date = e.date

しかし、これを出力として取得します

| | 日付 | 収入 | 費用 |
|---------------|--------|---------|
| | 2005 年 9 月 | 56000 | 68800 |
| | 2005 年 9 月 | 66600 | 68800 |
| | 2005 年 9 月 | 50000 | 68800 |

これがSQLFiddleのデモです

于 2013-09-05T04:42:23.500 に答える