首先创建假设有一张名为 "ORDERS" 的表,它记录了不同颜色的产品的销售额:
ORDER_ID PRODUCT_COLOR SALE_AMOUNT
-------------------------------------
1 Red 100
2 Blue 200
3 Green 300
4 Red 400
5 Blue 500
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))
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" 列,以此类推。
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 函数,将多行数据合并为一行数据