MySQL 格式化查询 - 将结果列设置为 Table header
MySQL formatting query - Setting column Results as a Table header
我正在尝试在 MySQL 中创建一个报告,以按客户和市场输出交易股票的数量。
我得到了我想要的结果(使用多个 tables),但需要更改输出 table 以便一列的结果成为另一列的 header , 然后按市场计算客户的数量。
这是我目前所拥有的;
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)
我浏览了类似的主题,并尝试了 'inner joins' 和 'pivots',但无法让它们与我的其他参数一起工作。
谁能提供帮助?
更新
我修改了 MySQL 脚本以获得我现在想要的格式,但需要让每个客户端只有一行包含所有 Exchange 值。
我已经尝试了各种组合并且可以得到一行,但是值没有正确填充。
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;
我正在尝试在 MySQL 中创建一个报告,以按客户和市场输出交易股票的数量。
我得到了我想要的结果(使用多个 tables),但需要更改输出 table 以便一列的结果成为另一列的 header , 然后按市场计算客户的数量。
这是我目前所拥有的;
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)
我浏览了类似的主题,并尝试了 'inner joins' 和 'pivots',但无法让它们与我的其他参数一起工作。
谁能提供帮助?
更新 我修改了 MySQL 脚本以获得我现在想要的格式,但需要让每个客户端只有一行包含所有 Exchange 值。 我已经尝试了各种组合并且可以得到一行,但是值没有正确填充。
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;