Oracle 一行转多行的sql
时间: 2023-04-08 12:05:19 浏览: 97
可以使用Oracle的UNPIVOT函数来实现一行转多行的SQL。例如:
SELECT id, category, value
FROM my_table
UNPIVOT (
value FOR category IN (column1, column2, column3)
);
其中,my_table是要转换的表,column1、column2、column3是要转换的列,id是表中的唯一标识符,category是转换后的列名,value是转换后的值。
相关问题
oracle一行拆分成多行
您可以使用 Oracle SQL 中的 CONNECT BY ... LEVEL 子句将一行数据拆分成多行。以下是一个例子:
假设您有以下表:
```
CREATE TABLE test (id NUMBER, data VARCHAR2(100));
INSERT INTO test VALUES (1, 'A,B,C,D');
```
您可以使用以下查询将 data 列中的逗号分隔的值拆分成多行:
```
SELECT id, TRIM(REGEXP_SUBSTR(data, '[^,]+', 1, LEVEL)) AS value
FROM test
CONNECT BY LEVEL <= REGEXP_COUNT(data, ',') + 1;
```
这将返回以下结果:
```
ID | VALUE
---|-----
1 | A
1 | B
1 | C
1 | D
```
这里使用了 REGEXP_SUBSTR 函数和正则表达式来获取逗号分隔的值,并使用 LEVEL 来生成多个行。
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;