我有一个要求,即必须将表中的某些列组合在一起以生成查询结果。示例查询如下所示:
SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4)
FROM MY_TABLE
GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO');
我有一种情况,用户以前缀应用程序的逗号分隔顺序指定按位置的顺序。例如:1,2和列索引的不同组合,具体取决于用户输入。
我正在使用oracle 11g作为数据库。
我要求对用户传递的列号执行排序。例如:
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
执行上述查询时出现以下错误:
Error starting at line 1 in command:
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
Error at Command Line:4 Column:16
Error report:
SQL Error: ORA-01785: ORDER BY item must be the number of a SELECT-list expression
01785. 00000 - "ORDER BY item must be the number of a SELECT-list expression"
请有人可以指导我如何在此查询中添加订单!!!!!!
提前致谢!!!
答案 0 :(得分:0)
您可以通过两种方式实现这一目标。
在您的订单中使用/ 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