Oracle SQL-具有联合硬编码值的ORDER BY?

Oracle SQL-具有联合硬编码值的ORDER BY?,oracle,csv,sql-order-by,union,Oracle,Csv,Sql Order By,Union,下面是一些伪代码来解释我要做的事情: SELECT '"'|| 'ID' ||'"' ||','|| '"'|| 'FIRST_NAME' ||'"' ||','|| '"'|| 'LAST_NAME' ||'"' FROM DUAL UNION SELECT '"'|| ID ||'"' ||','|| '"'|| FIRST_NAME ||'"' ||','|| '"'|| LAST_NAME || ' " ' FROM TEMP_TABLE; 我正在创建一个CSV文件,我必须硬编码

下面是一些伪代码来解释我要做的事情:

SELECT
'"'|| 'ID' ||'"' ||','||
'"'|| 'FIRST_NAME' ||'"' ||','||
'"'|| 'LAST_NAME' ||'"'
FROM DUAL
UNION
SELECT   
'"'|| ID ||'"' ||','||
'"'|| FIRST_NAME ||'"' ||','||
'"'|| LAST_NAME || ' " '
FROM TEMP_TABLE;
我正在创建一个CSV文件,我必须硬编码我的列名,这样当用户将CSV文件导入Excel时,列和数据将正确显示


如何确保查询的前半部分(列名)首先显示在此CSV文件中?ORDER BY子句会回退一个错误,可能是因为查询的前半部分没有定义列名,因此没有要排序的内容。

您可以使用内联视图进行真正的查询,并为每个分支添加一个伪列;然后将其用于排序,但只选择真实列。e、 .g:

SELECT csv
FROM (
  SELECT 1 AS order_col,
  '"'|| 'ID' ||'"' ||','||
  '"'|| 'FIRST_NAME' ||'"' ||','||
  '"'|| 'LAST_NAME' ||'"' AS csv
  FROM DUAL
  UNION
  SELECT 2, 
  '"'|| ID ||'"' ||','||
  '"'|| FIRST_NAME ||'"' ||','||
  '"'|| LAST_NAME || ' " '
  FROM TEMP_TABLE
)
ORDER BY order_col, csv;
或者,您可以在case表达式中查找固定值,该表达式也需要内联视图,并且更具重复性:

SELECT csv
FROM (
  SELECT
  '"'|| 'ID' ||'"' ||','||
  '"'|| 'FIRST_NAME' ||'"' ||','||
  '"'|| 'LAST_NAME' ||'"' AS csv
  FROM DUAL
  UNION
  SELECT   
  '"'|| ID ||'"' ||','||
  '"'|| FIRST_NAME ||'"' ||','||
  '"'|| LAST_NAME || ' " '
  FROM TEMP_TABLE
)
ORDER BY CASE WHEN csv = '"ID","FIRST_NAME","LAST_NAME"' THEN 1 ELSE 2 END, csv;

不相关,但您的第一个分支不需要所有连接

...
  SELECT 1 AS order_col,
  '"ID","FIRST_NAME","LAST_NAME"' AS csv
  FROM DUAL
...

但是我想,当标题和列不匹配时,它会使维护变得更容易。

您可以硬编码一个值并使用它进行排序

SELECT Col
FROM (
SELECT
'"'|| 'ID' ||'"' ||','||
'"'|| 'FIRST_NAME' ||'"' ||','||
'"'|| 'LAST_NAME' ||'"' AS Col,
1 AS Sort
FROM DUAL
UNION
SELECT   
'"'|| ID ||'"' ||','||
'"'|| FIRST_NAME ||'"' ||','||
'"'|| LAST_NAME || ' " ',
2
FROM TEMP_TABLE) Table1
ORDER BY Sort ASC