首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在oracle中使用varchar字段时出现错误

在oracle中使用varchar字段时出现错误
EN

Stack Overflow用户
提问于 2013-12-11 15:14:43
回答 1查看 116关注 0票数 0

我有一个表,id和value都是varchars。

代码语言:javascript
复制
>> id          "value"
-----------------------
   a             1
   a             2
   a             5
   a             6
   a             7
   a             8
   b             4
   b             5
   b             6
   b             9

我只想看看输出

代码语言:javascript
复制
value    Result
-----------------
a        1-2,5,6-8
b        4-6,9

我试过使用ListAGG()函数

它将错误“值”作为无效标识符。

代码语言:javascript
复制
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);

我想有什么类型错配吗?你能帮帮我吗..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 15:58:59

代码有很多问题。但是,错误的原因是在子查询的选择中没有包括value

我还注意到您缺少PARTITION BY id,这是完成所需分组所必需的。您也没有在外部查询中按id进行分组。

此查询:

代码语言:javascript
复制
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

生产:

代码语言:javascript
复制
a   1-2, 5-8
b   4-6, 9

SQLFiddle在这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20522779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档