2017-08-04 79 views
0

我有一個查詢,我正在正確返回。添加第二個UNION導致錯誤

DECLARE @theItewId VARCHAR(100) = (SELECT item_id 
   FROM   ndc_attr 
   WHERE  attr_val = '00310072010'); 

SELECT nr.item_id, 
       nr.field_id, 
       nr.attr_val, 
       nr.upd_dtt, 
       nr.upd_usr, 
       nr.item_id, 
       1 AS counting, 
       nr.field_id 
FROM   ndc_attr nr 
WHERE  item_id = @theItewId 
       AND field_id IN ( 69, 144, 150, 148, 170 ) 
UNION ALL 
SELECT TOP 1 @theItewId          AS item_id, 
             418                 AS field_id, 
             nr.contract_num_val AS attr_val, 
             CURRENT_TIMESTAMP   AS upd_dtt, 
             '-1'                AS upd_usr, 
             '-1'                AS item_id, 
             '-1'                AS counting, 
             '-1'                AS field_id 
FROM   contract_ndc_brg nr 
WHERE  ndc_id = '00310072010' 
ORDER  BY upd_dtt DESC 

但是,當我嘗試添加另一個聯盟所有我得到一個錯誤,不明白爲什麼。

DECLARE @theItewId VARCHAR(100) = (SELECT item_id 
   FROM   ndc_attr 
   WHERE  attr_val = '00310072010'); 

SELECT nr.item_id, 
       nr.field_id, 
       nr.attr_val, 
       nr.upd_dtt, 
       nr.upd_usr, 
       nr.item_id, 
       1 AS counting, 
       nr.field_id 
FROM   ndc_attr nr 
WHERE  item_id = @theItewId 
       AND field_id IN ( 69, 144, 150, 148, 170 ) 
UNION ALL 
SELECT TOP 1 @theItewId          AS item_id, 
             418                 AS field_id, 
             nr.contract_num_val AS attr_val, 
             CURRENT_TIMESTAMP   AS upd_dtt, 
             '-1'                AS upd_usr, 
             '-1'                AS item_id, 
             '-1'                AS counting, 
             '-1'                AS field_id 
FROM   contract_ndc_brg nr 
WHERE  ndc_id = '00310072010' 
ORDER  BY upd_dtt DESC 
UNION ALL 
SELECT TOP 1 @theItewId        AS item_id, 
             981               AS field_id, 
             nr.quote_price        AS attr_val, 
             CURRENT_TIMESTAMP AS upd_dtt, 
             '-1'              AS upd_usr, 
             '-1'              AS item_id, 
             '-1'              AS counting, 
             '-1'              AS field_id 
FROM   contract_ndc_brg nr 
WHERE  ndc_id = '00310072010' 
ORDER  BY upd_dtt DESC  

我在做什麼錯,我該如何解決?

編輯:

消息156,級別15,狀態1,過程USP_ENTY_ATTR_GET_BY_ATTR_VALS,行中的關鍵字 '聯盟' 近151
不正確的語法。

+0

出現錯誤,你說?有很多這些。哪一個是你的? – JNevill

+0

嗯,我雖然加了它。我一刻。 –

+0

我發現了錯誤!我把它拉到報價塊。 – JNevill

回答

3

我認爲,問題是你不能做一個ORDER BY在你的工會之一。你可以這樣做,但是你需要將語句封裝在子查詢中:

SELECT * FROM 
(SELECT nr.item_id, 
     nr.field_id, 
     nr.attr_val, 
     nr.upd_dtt, 
     nr.upd_usr, 
     nr.item_id, 
     1 AS counting, 
     nr.field_id 
FROM ndc_attr nr 
WHERE item_id = @theItewId 
     AND field_id IN (69, 144, 150, 148, 170)) as t1 
UNION ALL 
SELECT * FROM 
(SELECT TOP 1 @theItewId   AS item_id, 
      418     AS field_id, 
      nr.contract_num_val AS attr_val, 
      CURRENT_TIMESTAMP AS upd_dtt, 
      '-1'    AS upd_usr, 
      '-1'    AS item_id, 
      '-1'    AS counting, 
      '-1'    AS field_id 
FROM contract_ndc_brg nr 
WHERE ndc_id = '00310072010' 
ORDER BY upd_dtt DESC) as t2 
UNION ALL 
SELECT * FROM 
(SELECT TOP 1 @theItewId  AS item_id, 
      981    AS field_id, 
      nr.quote_price  AS attr_val, 
      CURRENT_TIMESTAMP AS upd_dtt, 
      '-1'    AS upd_usr, 
      '-1'    AS item_id, 
      '-1'    AS counting, 
      '-1'    AS field_id 
FROM contract_ndc_brg nr 
WHERE ndc_id = '00310072010' 
ORDER BY upd_dtt DESC) as t3 
2

ORDER BY必須只去一次,並且在查詢的底部。你已經重複這一行:

ORDER BY upd_dtt DESC

這是造成錯誤

相關問題