如果您采用SQL查询并自行执行UNION,会产生什么语法错误?

mad*_*ulf 2 sql t-sql sql-server union sql-server-2005

我在SQL Server 2005中有这个奇怪的错误,我在其中进行工作查询,在其下面添加UNION关键字,然后再次复制查询.在我看来,这应该始终有效,但事实并非如此.我收到消息'关键字'union'附近的语法错误.

什么可能造成这个问题?

更具体地说,这是完整的查询:

select distinct deliveries.id, orders.id, 20 + sum(orders.mass1) as allowed_duration 
from features_resources  
inner join features on features.id = featureid 
inner join orders on orders.id = features_resources.resourceid 
inner join orderinformations on orders.id = orderinformations.orderid
inner join deliveries on orderinformations.deliveryid = deliveries.id
where features.name = 'O_FRAIS'
and     (deliveries.ID IN
                      (SELECT     ID
                        FROM          dbo.DeliveriesInExportedSchedule))

group by deliveries.id, features.name ,orders.id order by deliveries.id
union
select distinct deliveries.id, orders.id, 20 + sum(orders.mass1) as allowed_duration 
from features_resources  
inner join features on features.id = featureid 
inner join orders on orders.id = features_resources.resourceid 
inner join orderinformations on orders.id = orderinformations.orderid
inner join deliveries on orderinformations.deliveryid = deliveries.id
where features.name = 'O_FRAIS'
and     (deliveries.ID IN
                      (SELECT     ID
                        FROM          dbo.DeliveriesInExportedSchedule))

group by deliveries.id, features.name ,orders.id order by deliveries.id 
Run Code Online (Sandbox Code Playgroud)

我试图通过从一个简单的查询开始并逐个添加功能(内部联接,嵌套查询,分组依据,总和......)来重现较小查询的错误,但无法再次重现错误.

任何的想法 ?

Mar*_*ith 9

它实际上order by deliveries.id是导致问题的上半部分.

order by需要应用到整个查询.

语法示例

SELECT v1.number
FROM   master.dbo.spt_values v1
WHERE  v1.number > 2000

UNION

SELECT   v2.number
FROM     master.dbo.spt_values v2
WHERE    v2.number < 10
ORDER BY v1.number
Run Code Online (Sandbox Code Playgroud)

  • +1,糟糕的代码格式掩盖了明显的! (2认同)