简体   繁体   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

How to query the above table to have 9 columns of inspectors id containing value of fare evasion value followed by the t4_date (Total 10 columns).如何查询上表有 9 列检查员 id,其中包含逃票值的值,后跟 t4_date(共 10 列)。 eg 16 4 null 7 5 9 null null null 2020-12-04例如 16 4 null 7 5 9 null null Z37A6259CC0C1DAE0499A78020429

In Oracle, you can use PIVOT :在 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
  )
)

or conditional aggregation (which works in Oracle and MySQL):或条件聚合(适用于 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;

Which, for your sample data:其中,对于您的示例数据:

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

Both output: output:

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

Oracle db<>fiddle here Oracle db<> 在这里摆弄

MySQL db<>fiddle here MySQL db<> 在这里摆弄

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

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