【问题标题】:SQL Query from tables data表数据的 SQL 查询
【发布时间】:2021-04-02 07:15:17
【问题描述】:
inspector_id    fare_evasion_dailybasis t4_date     
5   11  2020-12-01
6   7   2020-12-01
7   4   2020-12-01
3   23  2020-12-01
1   18  2020-12-01
2   5   2020-12-01
4   16  2020-12-01
5   7   2020-12-02
6   9   2020-12-02
9   5   2020-12-02
3   26  2020-12-02
6   2   2020-12-03
5   5   2020-12-03
9   3   2020-12-03
7   12  2020-12-03
3   18  2020-12-03
8   6   2020-12-03
1   16  2020-12-04
4   7   2020-12-04
6   9   2020-12-04
5   5   2020-12-04
2   4   2020-12-04
2   4   2020-12-05
5   8   2020-12-05
1   2   2020-12-05

如何查询上表有 9 列检查员 id,其中包含逃票值的值,后跟 t4_date(共 10 列)。例如 16 4 null 7 5 9 null null null 2020-12-04

【问题讨论】:

  • 请注意,该表包含 3 列
  • 您已标记 MySQL 和 Oracle;尽管它们都归 Oracle Corporation 所有,但它们是不同的 RDBMS。你用的是哪个?
  • 考虑处理应用代码中数据显示的问题

标签: mysql sql oracle oracle10g


【解决方案1】:

在Oracle中,你可以使用PIVOT:

SELECT *
FROM   table_name
PIVOT ( 
  SUM( fare_evasion_dailybasis )
  FOR inspector_id IN (
    1 AS insp1,
    2 AS insp2,
    3 AS insp3,
    4 AS insp4,
    5 AS insp5,
    6 AS insp6,
    7 AS insp7,
    8 AS insp8,
    9 AS insp9
  )
)

或条件聚合(适用于 Oracle 和 MySQL):

SELECT t4_date,
       SUM( CASE inspector_id WHEN 1 THEN fare_evasion_dailybasis END ) AS insp1,
       SUM( CASE inspector_id WHEN 2 THEN fare_evasion_dailybasis END ) AS insp2,
       SUM( CASE inspector_id WHEN 3 THEN fare_evasion_dailybasis END ) AS insp3,
       SUM( CASE inspector_id WHEN 4 THEN fare_evasion_dailybasis END ) AS insp4,
       SUM( CASE inspector_id WHEN 5 THEN fare_evasion_dailybasis END ) AS insp5,
       SUM( CASE inspector_id WHEN 6 THEN fare_evasion_dailybasis END ) AS insp6,
       SUM( CASE inspector_id WHEN 7 THEN fare_evasion_dailybasis END ) AS insp7,
       SUM( CASE inspector_id WHEN 8 THEN fare_evasion_dailybasis END ) AS insp8,
       SUM( CASE inspector_id WHEN 9 THEN fare_evasion_dailybasis END ) AS insp9
FROM   table_name
GROUP BY t4_date;

对于您的示例数据:

CREATE TABLE table_name ( inspector_id, fare_evasion_dailybasis, t4_date ) AS
SELECT 5,   11,  DATE '2020-12-01' FROM DUAL UNION ALL
SELECT 6,   7,   DATE '2020-12-01' FROM DUAL UNION ALL
SELECT 7,   4,   DATE '2020-12-01' FROM DUAL UNION ALL
SELECT 3,   23,  DATE '2020-12-01' FROM DUAL UNION ALL
SELECT 1,   18,  DATE '2020-12-01' FROM DUAL UNION ALL
SELECT 2,   5,   DATE '2020-12-01' FROM DUAL UNION ALL
SELECT 4,   16,  DATE '2020-12-01' FROM DUAL UNION ALL
SELECT 5,   7,   DATE '2020-12-02' FROM DUAL UNION ALL
SELECT 6,   9,   DATE '2020-12-02' FROM DUAL UNION ALL
SELECT 9,   5,   DATE '2020-12-02' FROM DUAL UNION ALL
SELECT 3,   26,  DATE '2020-12-02' FROM DUAL UNION ALL
SELECT 6,   2,   DATE '2020-12-03' FROM DUAL UNION ALL
SELECT 5,   5,   DATE '2020-12-03' FROM DUAL UNION ALL
SELECT 9,   3,   DATE '2020-12-03' FROM DUAL UNION ALL
SELECT 7,   12,  DATE '2020-12-03' FROM DUAL UNION ALL
SELECT 3,   18,  DATE '2020-12-03' FROM DUAL UNION ALL
SELECT 8,   6,   DATE '2020-12-03' FROM DUAL UNION ALL
SELECT 1,   16,  DATE '2020-12-04' FROM DUAL UNION ALL
SELECT 4,   7,   DATE '2020-12-04' FROM DUAL UNION ALL
SELECT 6,   9,   DATE '2020-12-04' FROM DUAL UNION ALL
SELECT 5,   5,   DATE '2020-12-04' FROM DUAL UNION ALL
SELECT 2,   4,   DATE '2020-12-04' FROM DUAL UNION ALL
SELECT 2,   4,   DATE '2020-12-05' FROM DUAL UNION ALL
SELECT 5,   8,   DATE '2020-12-05' FROM DUAL UNION ALL
SELECT 1,   2,   DATE '2020-12-05' FROM DUAL

两个输出:

T4_DATE | INSP1 | INSP2 | INSP3 | INSP4 | INSP5 | INSP6 | INSP7 | INSP8 | INSP9 :----------------- | ----: | ----: | ----: | ----: | ----: | ----: | ----: | ----: | ----: 2020-12-03 00:00:00 | | | 18 | | 5 | 2 | 12 | 6 | 3 2020-12-05 00:00:00 | 2 | 4 | | | 8 | | | | 2020-12-02 00:00:00 | | | 26 | | 7 | 9 | | | 5 2020-12-04 00:00:00 | 16 | 4 | | 7 | 5 | 9 | | | 2020-12-01 00:00:00 | 18 | 5 | 23 | 16 | 11 | 7 | 4 | |

Oracle 数据库小提琴here

MySQL 数据库小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-30
    • 2021-10-07
    • 2012-09-02
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2012-08-11
    • 2012-04-07
    相关资源
    最近更新 更多