Oracle ,有几种写法可以实现行转列并统计

首先创建假设有一张名为 "ORDERS" 的表,它记录了不同颜色的产品的销售额:

ORDER_ID  PRODUCT_COLOR  SALE_AMOUNT
-------------------------------------
1         Red            100
2         Blue           200
3         Green          300
4         Red            400
5         Blue           500
  1. PIVOT 关键字:使用 PIVOT 关键字可以将一张表中的行转换为列。这是最常用的行转列方法。

SELECT *
FROM
  (SELECT PRODUCT_COLOR, SALE_AMOUNT
   FROM ORDERS)
PIVOT
(SUM(SALE_AMOUNT) FOR PRODUCT_COLOR IN ('Red' AS Red, 'Blue' AS Blue, 'Green' AS Green))
  1. DECODE 函数:使用 DECODE 函数可以实现行转列,但实现起来可能比较复杂。

SELECT PRODUCT_COLOR,
       SUM(DECODE(PRODUCT_COLOR, 'Red', SALE_AMOUNT, 0)) AS Red,
       SUM(DECODE(PRODUCT_COLOR, 'Blue', SALE_AMOUNT, 0)) AS Blue,
       SUM(DECODE(PRODUCT_COLOR, 'Green', SALE_AMOUNT, 0)) AS Green
FROM ORDERS
GROUP BY PRODUCT_COLOR

在这个例子中,我们使用了 DECODE 函数,并在每行上对产品颜色进行了判断,如果颜色是 "Red",则将销售额添加到 "Red" 列,如果颜色是 "Blue",则将销售额添加到 "Blue" 列,以此类推。

  1. UNION ALL 子句:使用 UNION ALL 子句和子查询可以实现行转列,但这种方法实现起来需要很多步骤,不太方便。

使用 UNION ALL 函数,将多行数据合并为一行数据。

使用 GROUP BY 子句,将不同的销售额进行统计。

SELECT PRODUCT_COLOR, SUM(SALE_AMOUNT) AS SALE_AMOUNT
FROM
(
    SELECT 'Red' AS PRODUCT_COLOR, SALE_AMOUNT FROM ORDERS WHERE PRODUCT_COLOR = 'Red'
    UNION ALL
    SELECT 'Blue' AS PRODUCT_COLOR, SALE_AMOUNT FROM ORDERS WHERE PRODUCT_COLOR = 'Blue'
    UNION ALL
    SELECT 'Green' AS PRODUCT_COLOR, SALE_AMOUNT FROM ORDERS WHERE PRODUCT_COLOR = 'Green'
)
GROUP BY PRODUCT_COLOR

该表的每行记录了一种颜色的销售额。然后使用 UNION ALL 函数,将多行数据合并为一行数据

猜你喜欢

转载自blog.csdn.net/jackwu11/article/details/128993987