2017-08-04 6 views
0

私は正しく処理しているクエリを取得しています。エラーを引き起こす2番目の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 

しかし、別のUNION ALLを追加しようとすると、エラーが発生し、その理由を理解できません。

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
キーワード 'UNION' 付近に不適切な構文。

+0

エラーがありますか?それらの多くがあります。あなたはどちらですか? – JNevill

+0

うーん、私はそれを追加しましたが。私は瞬間。 –

+0

エラーが見つかりました!私はそれを引用ブロックに引っ張った。 – JNevill

答えて

3

を引き起こしている

ORDER BY upd_dtt DESC

は、私は問題は、あなたの組合のいずれかで、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は、クエリの一番下に一度だけ移動する必要があります。エラー

関連する問題