MySQL格式化查询 - 将列结果设置为表标题

时间:2015-05-15 09:31:03

标签: mysql formatting

我正在尝试在MySQL中创建一份报告,按客户和市场输出交易股票数量。

我得到了我想要的结果(使用多个表),但是需要更改输出表,以便一列的结果成为另一列的标题,然后具有Client by Market的数量。

这是我到目前为止所拥有的;

mysql> SELECT IFNULL(sc.name,"All Clients") as "Clients",
 IFNULL(o.exchangeid,"All Markets") as "Markets",  
SUM(o.filledqty) as "Total Shares"
from ixrisk.orders o, ixrisk.clients c, ixrisk.sub_clients sc
where c.sub_client_id = sc.id and o.compid = c.clientname
GROUP BY sc.name, o.exchangeid WITH ROLLUP;
+------------------+-------------+--------------+
| Clients          | Markets     | Total Shares |
+------------------+-------------+--------------+
| FIXN_CL_CLIENT_1 | AMS         |           70 |
| FIXN_CL_CLIENT_1 | BTE         |          112 |
| FIXN_CL_CLIENT_1 | LSE         |         1147 |
| FIXN_CL_CLIENT_1 | All Markets |         1329 |
| qa_client_tst1   | LSE         |            0 |
| qa_client_tst1   | All Markets |            0 |
| All Clients      | All Markets |         1329 |
+------------------+-------------+--------------+
7 rows in set (0.01 sec)

我希望它能像这样出来,但却无法实现。

+------------------+------+------+------+-------------+
| Clients          | AMS  | BTE  | LSE  | All Markets |
+------------------+------+------+------+-------------+
| FIXN_CL_CLIENT_1 | 70   | 112  | 1147 |  1329       |
| qa_client_tst1   | 0    | 0    | 0    |  0          |
| All Clients      | 70   | 112  | 1147 |  1329       |
+------------------+------+------+------+-------------+
3 rows in set (0.01 sec)

我查看了类似的主题,尝试了“内连接”和“枢轴”,但无法使用其他参数。

有人可以提供任何帮助吗?

更新 我已经修改了MySQL脚本以获得我现在想要的格式,但需要让每个客户端只有一行包含所有Exchange值。 我尝试了各种组合,可以获得一行,但值不能正确填充。

1 个答案:

答案 0 :(得分:0)

    mysql> select sc.name,
COALESCE(SUM(case when `exchangeid` = 'AMS' then o.filledqty end),0) as AMS,
COALESCE(SUM(case when `exchangeid` = 'BRU' then o.filledqty end),0) as BRU,
COALESCE(SUM(case when `exchangeid` = 'BTE' then o.filledqty end),0) as BTE,
COALESCE(SUM(case when `exchangeid` = 'CHI' then o.filledqty end),0) as CHI,
COALESCE(SUM(case when `exchangeid` = 'CPH' then o.filledqty end),0) as CPH,
COALESCE(SUM(case when `exchangeid` = 'GER' then o.filledqty end),0) as GER,
COALESCE(SUM(case when `exchangeid` = 'HEX' then o.filledqty end),0) as HEX,
COALESCE(SUM(case when `exchangeid` = 'JNB' then o.filledqty end),0) as JNB,
COALESCE(SUM(case when `exchangeid` = 'LIS' then o.filledqty end),0) as LIS,
COALESCE(SUM(case when `exchangeid` = 'LSE' then o.filledqty end),0) as LSE,
COALESCE(SUM(case when `exchangeid` = 'MCE' then o.filledqty end),0) as MCE,
COALESCE(SUM(case when `exchangeid` = 'MIL' then o.filledqty end),0) as MIL,
COALESCE(SUM(case when `exchangeid` = 'OSL' then o.filledqty end),0) as OSL,
COALESCE(SUM(case when `exchangeid` = 'PAR' then o.filledqty end),0) as PAR,
COALESCE(SUM(case when `exchangeid` = 'STO' then o.filledqty end),0) as STO,
COALESCE(SUM(case when `exchangeid` = 'SWX' then o.filledqty end),0) as SWX,
COALESCE(SUM(case when `exchangeid` = 'TRQ' then o.filledqty end),0) as TRQ,
COALESCE(SUM(case when `exchangeid` = 'VIE' then o.filledqty end),0) as VIE,
COALESCE(SUM(case when `exchangeid` = 'VTX' then o.filledqty end),0) as VTX,
COALESCE(SUM(o.filledqty),0) as "All Markets"
from orders o
INNER JOIN clients c on o.compid = c.clientname
INNER JOIN sub_clients sc on c.sub_client_id = sc.id
INNER JOIN sub_clients sc on c.sub_client_id = sc.id
group by sc.name;