I guess I just answered my own question. :) I need to dynamically create SQL query, basing on all values in currency field. With php (using codeigniter) this can be achieved like this:
Step 1. I need to find out, what currencies I have in my table
<?php
$curr_sql = "SELECT DISTINCT currency FROM `table` ORDER BY currency ASC";
$curr_query = $this->db->query($curr_sql);
/*
|----------|
| currency |
|----------|
| EUR |
| GBP |
| USD |
|----------|
*/
?>
Step 2. I need to prepare sql query (adding specific column for each existing currency).
<?php
$sql = "SELECT period, category, subcategory";
foreach ($curr_query->result() as $row) {
$curr = $row->currency;
$sql .= ", SUM(IF(currency = '" . $curr . "', amount, 0)) AS '" . $curr . "'";
}
$sql .= " FROM `table` GROUP BY period, category, subcategory";
/* This is the sql I will get:
SELECT period, category, subcategory
, SUM(IF(currency = 'EUR', amount, 0)) AS 'EUR'
, SUM(IF(currency = 'GBP', amount, 0)) AS 'GBP'
, SUM(IF(currency = 'USD', amount, 0)) AS 'USD'
FROM `table`
GROUP BY period, category, subcategory;
*/
?>
Step 3. Now I just execute my dynamically prepared query.
<?php
$myResult = $this->db->query($sql);
/* This is the result I get
|------------|--------------|-------------|--------|---------|---------|
| period | category | subcategory | EUR | GBP | USD |
|------------|--------------|-------------|--------|---------|---------|
| 2014-01-01 | Category One | SubCat One | 325.48 | 1680.20 | 2525.50 |
| 2014-01-01 | Category One | SubCat Two | 229.78 | 1152.41 | 0 |
| 2014-01-01 | Category Two | SubCat One | 417.92 | 980.64 | 0 |
| 2014-01-02 | Category One | SubCat One | 0 | 0 | 700.12 |
|------------|--------------|-------------|--------|---------|---------|
*/
?>
I think that works for me. Thanks!