Sql 在oracle中使用varchar字段时出现错误
我有一张桌子 id和value都是varcharsSql 在oracle中使用varchar字段时出现错误,sql,oracle11g,Sql,Oracle11g,我有一张桌子 id和value都是varchars >> id "value" ----------------------- a 1 a 2 a 5 a 6 a 7 a 8 b 4 b 5 b 6
>> id "value"
-----------------------
a 1
a 2
a 5
a 6
a 7
a 8
b 4
b 5
b 6
b 9
我只是想看看输出
value Result
-----------------
a 1-2,5,6-8
b 4-6,9
我尝试使用listag()
函数
它将错误“value”作为无效标识符
SELECT
LISTAGG ( TXT,
', ' )
WITHIN GROUP (ORDER BY "value")
"Result"
FROM
(SELECT
CASE
WHEN MIN ( "value" ) = MAX ( "value" )
THEN
CAST ( MIN ( "value" ) AS VARCHAR2 ( 400 ) )
ELSE
MIN ( "value" )
|| '-'
|| MAX ( "value" )
END
AS TXT,
MIN ( "value" ) AS SOURCE
FROM
(SELECT
ROW_NUMBER ( ) OVER (ORDER BY MIN ( "value" ))
- TO_NUMBER ( "value" )
AS GRP
FROM
TABL2)
GROUP BY
GRP);
我猜是否存在类型不匹配。。??
你能帮我一下吗…代码有很多问题。但是错误的原因是在子查询的SELECT中没有包含
value
我还注意到您缺少按id划分的分区,这是进行所需分组所必需的。在外部查询中,您也没有按id
进行分组
此查询:
SELECT id,
LISTAGG ( TXT,', ' )
WITHIN GROUP (ORDER BY source)"Result"
FROM
(SELECT id,
CASE
WHEN MIN ( "value" ) = MAX ( "value" )
THEN
CAST ( MIN ( "value" ) AS VARCHAR2 ( 400 ) )
ELSE
MIN ( "value" )
|| '-'
|| MAX ( "value" )
END
AS TXT,
MIN ( "value" ) AS SOURCE
FROM (
SELECT id,"value",
ROW_NUMBER ( ) OVER (partition by id ORDER BY MIN ( "value" ))
- TO_NUMBER ( "value" )
AS GRP
FROM
TABL2
GROUP BY id,"value"
)
GROUP BY
id,GRP)
GROUP BY id
产生:
a 1-2, 5-8
b 4-6, 9
您有两个帐户吗@马丁:我没有两个账户……:)它只是相同,但我得到的错误是“value invalid identifier”,我的两个列都是varchars。你能帮我找出value
列的名称是否真的小写吗?如果你对wm_concat没意见,那么它真的很简单。但不幸的是,它不受支持。@Joe。。。OP希望两个列都是varchar2。你拥有的是一个数字和varchar2。你能查一下吗???@realspirituals对不起,我不明白你的意思。由于LISTAGG的concat,输出固有地为varchar2。我最初在SQLFiddle中将“value”创建为一个数字,但将其更改为varchar2并不需要对SELECT进行任何更改,这两种方式都会产生相同的结果。