2017-05-22 7 views
0

トランザクションとカテゴリのそれぞれに次の表があります。 私は以下のクエリテーブルに結果を表示するクエリを作成しようとしています。以下のように0合計 -MySQL - 合計表2すべてを示す列の値表1の説明

私は、これは、しかし、私が私のカテゴリーBがゼロで示されたいカテゴリーBを与えていないされ、次の

SELECT IFNULL(categories.Name,'Total') AS category, 
     IFNULL(SUM(transactions.Amount),0) AS amount, 
     categories.Color 
FROM transactions,categories 
WHERE categories.CatID = transactions.CatID 
GROUP BY categories.Name WITH ROLLUP 

を試してみました。 ..

取引

+-----------+----------------+------------+ 
| Category | Amount  | Color  | 
+-----------+----------------+------------+ 
|   A | 70    | Green  | 
|   B | 40    | Blue  | 
|  Total | 110   | Blue  | 
+-----------+----------------+------------+ 

必要な結果

その結果を以下のGETTING

+-----------+------------+------------+--------+ 
| TransID | SaleDate | CatID  | Amount | 
+-----------+------------+------------+--------+ 
|   1 | 2012-02-10 | 1   |  10 | 
|   2 | 2012-02-10 | 3   |  10 | 
|   3 | 2012-02-10 | 3   |  20 | 
|   4 | 2012-02-10 | 1   |  25 | 
|   5 | 2012-02-10 | 1   |  35 | 
|   6 | 2012-02-10 | 3   |  5 | 
|   7 | 2012-02-10 | 3   |  5 | 
+-----------+------------+------------+--------+ 

カテゴリー

+------------+------+----------+ 
| CatID  | Name | Color | 
+------------+------+----------+ 
|   1 | A | Green | 
|   2 | B | Red | 
|   3 | C | Blue | 
+------------+------+----------+ 

を助けてくださいあなたはrollupleft joinを探している

+-----------+----------------+------------+ 
| Category | Amount  | Color  | 
+-----------+----------------+------------+ 
|   A | 70    | Green  | 
|   B | 0    | Red  | 
|   C | 40    | Blue  | 
|  Total | 110   | Pink  | 
+-----------+----------------+------------+ 
+0

[この記事](https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/)がベンを使用しています上で使用しているANSI 89標準の代わりにANSI 92標準を使用して結合の種類をかなり効果的に説明するための図です。両方のデータセットにないレコードを保持するには、外部結合が必要です。 – xQbert

答えて

1

select coalesce(c.category, 'total') as category, 
     coalesce(sum(t.amount), 0) as amount, 
     coalesce(c.color, 'pink') as color -- this is weird 
from categories c left join 
    transactions t 
    on c.catid = t.catid 
group by c.category with rollup; 
+0

ありがとうゴードン。あなたは男です! - 取引テーブルのSaleDate列の日付範囲にトランザクションを表示するクエリを書くにはどうすればいいですか? @IshmaelChibvuri。 –

+1

。 。 'transactions'の条件を' on'節に追加します。 –

関連する問題