使用UNION在SQL Select的末尾添加一行

时间:2017-12-29 15:41:34

标签: sql oracle

我使用一些过滤器在记录中创建了一个视图,我必须添加仅包含来自另一个表的id的行和sql结果末尾的特定行。

所以预期结果是这样的:

    Column 1 | Column 2 | Column 3 | Column4
1   0001     | 565      | AM1      | DR01
.
.
59  TEST1    |          |          |
60  NON_IMMO |          |          |

第59行是第二个表的id,第60行是指定行。 我的查询是这样的:

SELECT DISTINCT a.asset_id 
 , a.serial_id 
 , a.VIN 
 , b.project_id 
  FROM ps_asset a 
 WHERE --Some conditions  
  UNION 
 SELECT PO_GROUP_ID 
 ,' ' 
 , ' ' 
 , ' ' 
  FROM PS_PO_GROUP_TBL 
  UNION 
 SELECT 'NON_IMMO' 
 ,' ' 
 ,' ' 
 ,' ' 
  FROM dual

但问题是使用了这个问题我最后没有得到具体的行。

我觉得SGBD显示按字母顺序排列的2个UNIONS。

    Column 1 | Column 2 | Column 3 | Column4
1   0001     | 565      | AM1      | DR01
.
.
59  NON_IMMO |          |          |
60  TEST1    |          |          |

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

将最后UNION更改为UNION ALL以跳过删除重复项(作为副作用命令行)。那应该够了......

...
FROM PS_PO_GROUP_TBL 
UNION ALL
SELECT 'NON_IMMO' 
...

答案 1 :(得分:2)

UNION不会强制对记录下达订单。您需要另一个错误的第5列以确保数据结束。见例子

SELECT COLUMN1
FROM
(
SELECT COLUMN1, 0 ORDER_BY FROM TABLE1
UNION
SELECT 'FOOTER' COLUMN1, 1 ORDER_BY FROM DUAL
)
ORDER BY ORDER_BY

此外,如果您的数据可能与最后的内容匹配,那么您将要使用UNION ALL来确保记录仍然添加。

答案 2 :(得分:0)

您的查询将变为:

您必须将查询包装在一个主查询中,您可以在其中应用全局ORDER BY

第二个:我删除了DISTINCT,因为UNION删除了重复的

SELECT asset_id, serial_id, vin, project_id
FROM
(SELECT a.asset_id, a.serial_id,
    a.VIN, b.project_id 
FROM ps_asset a 
WHERE --Some conditions  
UNION 
SELECT PO_GROUP_ID, ' ', ' ', ' ' 
FROM PS_PO_GROUP_TBL 
UNION 
SELECT 'NON_IMMO', ' ', ' ', ' '  
FROM dual)
ORDER BY serial_id