繁体   English   中英

SQL 从表中查询数据

[英]SQL Query from tables data

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 Z37A6259CC0C1DAE0499A78020429

在 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

output:

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

Oracle db<> 在这里摆弄

MySQL db<> 在这里摆弄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM