oracle行转列sql
时间: 2023-07-03 14:21:58 浏览: 16
Oracle中可以使用PIVOT操作将行转列,具体可以按照如下的语法进行操作:
```
SELECT *
FROM (
SELECT [列1], [列2], [列3]
FROM [表名]
)
PIVOT (
MAX([目标列])
FOR [要转换的列]
IN ([列1], [列2], [列3])
)
```
例如,假设我们有一个名为sales的表,其中包含了日期、销售额和销售人员的信息。我们可以使用如下的语句将销售人员作为列,日期作为行,将销售额进行转换:
```
SELECT *
FROM (
SELECT sales_date, sales_person, sales_amount
FROM sales
)
PIVOT (
SUM(sales_amount)
FOR sales_person
IN ('John', 'Jane', 'Mike')
)
```
这样就可以将sales表中的数据从行转换为列,方便进行数据分析和报表制作。
相关问题
sql oracle 行转列 列转行
SQL Oracle中的行转列和列转行可以通过不同的方法来实现。在早期版本的Oracle中,可以使用函数如CONCAT、POSSTR和LOCATE来实现行转列和列转行。这些函数可以按照标点将多列转换为一行或者将多行转换为一列。
在较新的Oracle版本中,可以使用decode函数、PIVOT函数和case语句来实现行转列和列转行。使用decode函数可以实现行转列,适用于8i、9i、10g和以后版本。使用PIVOT函数可以实现行转列,适用于11g和以后版本。使用case语句也可以实现行转列和列转行。
以下是几个示例查询:
使用decode函数实现行转列:
SELECT NO, SUM(decode(monthh, '01', total)) "一月", SUM(decode(monthh, '02', total)) "二月", SUM(decode(monthh, '03', total)) "三月"
FROM FEE
GROUP BY NO
ORDER BY NO asc;
使用PIVOT函数实现行转列:
SELECT *
FROM FEE a
PIVOT ( sum(nvl(a.total,0)) FOR monthh IN ('01' as 一月,'02' as 二月,'03' as 三月))
ORDER BY NO asc;
使用case语句实现行转列和列转行:
SELECT NO, sum(case when Monthh='01' then TOTAL end) as 一月, sum(case when Monthh='02' then TOTAL end) as 二月, sum(case when Monthh='03' then TOTAL end) as 三月
FROM FEE
GROUP BY NO
ORDER BY NO asc;
oracle sql 动态行转列
在Oracle SQL中,可以使用PIVOT操作符来将动态行转换为列。下面是一个示例:
假设有以下表:
```
CREATE TABLE sales (
sales_id INT,
product_id INT,
month VARCHAR2(10),
amount NUMBER
);
INSERT INTO sales VALUES (1, 1, 'January', 100);
INSERT INTO sales VALUES (2, 1, 'February', 200);
INSERT INTO sales VALUES (3, 1, 'March', 300);
INSERT INTO sales VALUES (4, 2, 'January', 150);
INSERT INTO sales VALUES (5, 2, 'February', 250);
INSERT INTO sales VALUES (6, 2, 'March', 350);
```
可以使用以下查询将每个产品的销售额按月份转换为列:
```
SELECT *
FROM (
SELECT product_id, month, amount
FROM sales
)
PIVOT (
SUM(amount)
FOR month IN ('January', 'February', 'March')
);
```
查询结果将是:
```
PRODUCT_ID JANUARY FEBRUARY MARCH
---------- ------- -------- -----
1 100 200 300
2 150 250 350
```
在PIVOT子句中,SUM(amount)指定要在每个月份中聚合的值,FOR month IN ('January', 'February', 'March')指定要转换为列的月份。