Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在oracle中合并多行的场景_Oracle - Fatal编程技术网

在oracle中合并多行的场景

在oracle中合并多行的场景,oracle,Oracle,我有一张桌子,上面摆着 MY_ID(NUMBER) COL_1(NUMBER) COL_2(NUMBER) COL_3(VARCHAR2) 11 1001 NULL GT 11 NULL 1002 TG 11 NULL 1003 TG2 12 1004 NULL

我有一张桌子,上面摆着

MY_ID(NUMBER) COL_1(NUMBER) COL_2(NUMBER) COL_3(VARCHAR2)
11              1001          NULL          GT
11              NULL          1002          TG
11              NULL          1003          TG2

12              1004          NULL          GT
12              NULL          1006          TG
12              NULL          1005          TG2
我的预期结果是

MY_ID(NUMBER) COL_1(NUMBER) COL_2(NUMBER) COL_3(VARCHAR2)
11                1001          1003           TG2
12                1004          1006           TG
我可以用MAX来表示数字,但是Varchar2呢?
如何像这样组合多个行?

MAX aggregate函数也可以用于varchar,请参见此示例:

SELECT my_id, max( col_1 ), max( col_2 ), max( col_3 )
FROM Table1
GROUP BY my_id;
演示:


但是,在您的问题中指出,对于记录,
12
必须返回值
TG
,而不是
TG2
。我猜您希望返回的不是
COL_3
的最大列值,而是存在列
COL2
的最大值的记录中的值。在这种情况下,您可以使用如下查询:

SELECT my_id, max( col_1 ), max( col_2 ), 
      max( col_3 ) KEEP (DENSE_RANK LAST ORDER BY col_2 NULLS FIRST)
FROM Table1
GROUP BY my_id;
演示:


如果您的问题需要,也可以将MAX用于VARCHAR2。但这是真的吗?同样的问题也适用于数字——为什么是最大值而不是最小值?或平均值或总和?只有你知道——因为只有你知道这一切背后的商业问题。例如,对于ID=12,为什么选择TG而不是TG2或GT?我正试图理解稠密等级。。。之后,我们将确认答案
SELECT my_id, max( col_1 ), max( col_2 ), 
      max( col_3 ) KEEP (DENSE_RANK LAST ORDER BY col_2 NULLS FIRST)
FROM Table1
GROUP BY my_id;
| MY_ID | MAX(COL_1) | MAX(COL_2) | MAX(COL_3)KEEP(DENSE_RANKLASTORDERBYCOL_2NULLSFIRST) |
|-------|------------|------------|------------------------------------------------------|
|    11 |       1001 |       1003 |                                                  TG2 |
|    12 |       1004 |       1006 |                                                   TG |