SQL - 将多行记录合并和分组到列
SQL - Consolidate and group records from multiple rows to columns
有没有办法转置多行并将它们分组到列?
我有一个 table,其中包含来自不同 table 和列的发票值的数据。现在,我想通过发票编号获得它们。
InvoiceNumber
Table
Column
Value
123
A
Column A1
ABC
123
A
Column A2
DEF
123
A
Column A3
GHI
123
B
Column B1
JKL
123
B
Column B2
MNO
234
A
Column A1
1BC
234
A
Column A2
2EF
234
A
Column A3
3HI
现在,我需要按以下方式合并发票编号的详细信息。
InvoiceNumber
ColumnA1
ColumnA2
ColumnA3
ColumnB1
ColumnB2
123
ABC
DEF
GHI
JKL
MNO
234
1BC
2EF
3HI
非常感谢对此的任何帮助。我用 group by 尝试了几个选项,但其中 none 是有效的。
这是一个使用数据透视表的潜在解决方案。
首先创建一个 table
CREATE TABLE TABLE1
( INVOICENUMBER VARCHAR2(20),
TABLE_NAME VARCHAR2(20),
COLUMN_VAL VARCHAR2(20),
VALUE VARCHAR2(20)
)
让我们插入一些行
REM INSERTING into TABLE1
SET DEFINE OFF;
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','A','Column A1','ABC');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','A','Column A2','DEF');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','A','Column A3','GHI');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','B','Column B1','JKL');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','B','Column B2','MNO');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('234','A','Column A1','1BC');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('234','A','Column A2','2EF');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('234','A','Column A3','3HI');
现在让我们使用数据透视表查询这些结果。
WITH cte_mytable AS (
SELECT
invoicenumber,
column_val,
value
FROM
table1
)
SELECT
*
FROM
cte_mytable PIVOT (
MAX ( value )
FOR column_val
IN ( 'Column A1',
'Column A2',
'Column A3',
'Column B1',
'Column B2' )
);
有没有办法转置多行并将它们分组到列?
我有一个 table,其中包含来自不同 table 和列的发票值的数据。现在,我想通过发票编号获得它们。
InvoiceNumber | Table | Column | Value |
---|---|---|---|
123 | A | Column A1 | ABC |
123 | A | Column A2 | DEF |
123 | A | Column A3 | GHI |
123 | B | Column B1 | JKL |
123 | B | Column B2 | MNO |
234 | A | Column A1 | 1BC |
234 | A | Column A2 | 2EF |
234 | A | Column A3 | 3HI |
现在,我需要按以下方式合并发票编号的详细信息。
InvoiceNumber | ColumnA1 | ColumnA2 | ColumnA3 | ColumnB1 | ColumnB2 |
---|---|---|---|---|---|
123 | ABC | DEF | GHI | JKL | MNO |
234 | 1BC | 2EF | 3HI |
非常感谢对此的任何帮助。我用 group by 尝试了几个选项,但其中 none 是有效的。
这是一个使用数据透视表的潜在解决方案。 首先创建一个 table
CREATE TABLE TABLE1
( INVOICENUMBER VARCHAR2(20),
TABLE_NAME VARCHAR2(20),
COLUMN_VAL VARCHAR2(20),
VALUE VARCHAR2(20)
)
让我们插入一些行
REM INSERTING into TABLE1
SET DEFINE OFF;
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','A','Column A1','ABC');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','A','Column A2','DEF');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','A','Column A3','GHI');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','B','Column B1','JKL');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('123','B','Column B2','MNO');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('234','A','Column A1','1BC');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('234','A','Column A2','2EF');
Insert into TABLE1 (INVOICENUMBER,TABLE_NAME,COLUMN_VAL,VALUE) values ('234','A','Column A3','3HI');
现在让我们使用数据透视表查询这些结果。
WITH cte_mytable AS (
SELECT
invoicenumber,
column_val,
value
FROM
table1
)
SELECT
*
FROM
cte_mytable PIVOT (
MAX ( value )
FOR column_val
IN ( 'Column A1',
'Column A2',
'Column A3',
'Column B1',
'Column B2' )
);