Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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
Oracle11g 在连接的列上使用Order By_Oracle11g - Fatal编程技术网

Oracle11g 在连接的列上使用Order By

Oracle11g 在连接的列上使用Order By,oracle11g,Oracle11g,我有一个要求,表中的一些列必须分组在一起才能生成查询结果。示例查询如下所示: SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4) FROM MY_TABLE GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO'); 我有一个例子,用户在前端应用程序中以逗号分隔的顺序指定ORDERBY位

我有一个要求,表中的一些列必须分组在一起才能生成查询结果。示例查询如下所示:

SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4)
FROM MY_TABLE
GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO');
我有一个例子,用户在前端应用程序中以逗号分隔的顺序指定ORDERBY位置。例如:1、2和列索引的不同组合,具体取决于用户输入

我正在使用Oracle11g作为数据库

我需要对用户传递的列编号执行order by。例如:

SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4)
FROM MY_TABLE
GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO')
ORDER BY 1, 2;  -----------<<< How should I be able to add the order by clause here dynamically
请任何人都可以指导我如何在这个查询中按部分添加订单


提前感谢

您可以通过两种方式实现这一点

  • 在order by中使用相同的group by/select表达式

    SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4)
    FROM MY_TABLE
    GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO')
    ORDER BY COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4)
    ;
    
  • 使用内部选择并按计算名称或数字索引排序

    SELECT * FROM ( 
    SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4)
    FROM MY_TABLE
    GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO'))
    ORDER BY 1
    

  • 您可以通过两种方式实现这一点

  • 在order by中使用相同的group by/select表达式

    SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4)
    FROM MY_TABLE
    GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO')
    ORDER BY COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4)
    ;
    
  • 使用内部选择并按计算名称或数字索引排序

    SELECT * FROM ( 
    SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4)
    FROM MY_TABLE
    GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO'))
    ORDER BY 1