2016-08-29 13 views
1

私は次のクエリを(より大きなクエリの一部として)持っています。サブクエリ内の2つの異なるデータセットから合計結果を取得しようとしていますが、2つを1つの値にカプセル化しようとしています。私が持っているもの:UNION ALL句を使用して2つの別個のクエリを1つの値に集計する

(Select SUM('Invoiced MTD') from 

    ((Select SUM(CASE WHEN SOH.LASDLVNUM_0 <> '' AND SOH.LASINVNUM_0 <> '' AND MONTH(SOH.SHIDAT_0) = MONTH(GETDATE()) THEN 
    (SOP.NETPRI_0 * SOQ.QTY_0 * SOH.CHGRAT_0) ELSE 0 END) as 'Invoiced MTD' 
    From x3v6.CICPROD.SORDER SOH 
    LEFT OUTER JOIN x3v6.CICPROD.BPCUSTOMER BPC on SOH.BPCORD_0 = BPC.BPCNUM_0 
    LEFT OUTER JOIN x3v6.CICPROD.SORDERQ SOQ on SOH.SOHNUM_0 = SOQ.SOHNUM_0 
    LEFT OUTER JOIN x3v6.CICPROD.SORDERP SOP on SOQ.SOHNUM_0 = SOP.SOHNUM_0 and SOQ.SOPLIN_0 = SOP.SOPLIN_0 and SOQ.SOQSEQ_0 = SOP.SOPSEQ_0 
    LEFT OUTER JOIN x3v6.CICPROD.ITMMASTER ITM on SOP.ITMREF_0 = ITM.ITMREF_0)) 

    UNION ALL 

    ((Select SUM(CASE WHEN SIH.INVTYP_0 = 2 and MONTH(SIH.ACCDAT_0) = MONTH(GETDATE()) THEN SID.AMTNOTLIN_0 * (-1) ELSE 0 END) as 'Invoiced MTD' 
    From x3v6.CICPROD.SINVOICE SIH 
    Left Outer Join x3v6.CICPROD.SINVOICED SID on SIH.NUM_0 = SID.NUM_0)) 

as 'T2', 

しかし、私はUNION ALL節がどこにあるのか分かりません。基本的には、セールスクレジットメモとセールスオーダードルの合計を別々のテーブルから組み合わせたいと思っています。

誰でも私にこれを助けることができますか?

+0

どのようなエラーが表示されますか? 2つの列のデータ型は一致していますか? –

+0

どのDBMSを使用していますか?文字列リテラルに対する 'sum()'は意味をなさないと思われます。 –

+0

DMBSはSQL-SRV 2012です。 –

答えて

0

この内容はどうですか?

Select SUM([Invoiced MTD]) from 
( 
    Select SUM(CASE WHEN SOH.LASDLVNUM_0 <> '' AND SOH.LASINVNUM_0 <> '' AND MONTH(SOH.SHIDAT_0) = MONTH(GETDATE()) 
        THEN (SOP.NETPRI_0 * SOQ.QTY_0 * SOH.CHGRAT_0) ELSE 0 END) as 'Invoiced MTD' 
    From x3v6.CICPROD.SORDER SOH 
    LEFT OUTER JOIN x3v6.CICPROD.BPCUSTOMER BPC on SOH.BPCORD_0 = BPC.BPCNUM_0 
    LEFT OUTER JOIN x3v6.CICPROD.SORDERQ SOQ on SOH.SOHNUM_0 = SOQ.SOHNUM_0 
    LEFT OUTER JOIN x3v6.CICPROD.SORDERP SOP on SOQ.SOHNUM_0 = SOP.SOHNUM_0 and SOQ.SOPLIN_0 = SOP.SOPLIN_0 and SOQ.SOQSEQ_0 = SOP.SOPSEQ_0 
    LEFT OUTER JOIN x3v6.CICPROD.ITMMASTER ITM on SOP.ITMREF_0 = ITM.ITMREF_0 

UNION ALL 
    Select SUM(CASE WHEN SIH.INVTYP_0 = 2 and MONTH(SIH.ACCDAT_0) = MONTH(GETDATE()) 
       THEN SID.AMTNOTLIN_0 * (-1) ELSE 0 END) as 'Invoiced MTD' 
    From x3v6.CICPROD.SINVOICE SIH 
    Left Outer Join x3v6.CICPROD.SINVOICED SID on SIH.NUM_0 = SID.NUM_0 
)T 
+0

私は全体のクエリを投稿しようとしましたが、その長さのためにできません。誰かが自分の電子メールや投稿方法を私に提供できるのであれば、このエラーのトラブルシューティングに役立ちます。エラーは "UNION"の近くの構文が正しくなく、誤った構文が ')'の近くにあります。 –

+0

ありがとうございました。サブクエリをグループ化するだけで、全体の合計が表示されます。 –

0

これは機能しますか?私はあなたの問題の原因を正確には分かりませんが、間違いなく多くのかっこは必要ありません。また、SQLをフォーマット/美化するものを使用することをお勧めします。これは、1)コードの整合性を維持し、2)構文エラーを修正するための素晴らしい方法です。

SELECT SUM(x.invoiced_mtd) 
    FROM (SELECT SUM(CASE 
        WHEN soh.lasdlvnum_0 <> '' AND soh.lasinvnum_0 <> '' AND 
          MONTH(soh.shidat_0) = MONTH(getdate()) THEN 
         (sop.netpri_0 * soq.qty_0 * soh.chgrat_0) 
        ELSE 
         0 
        END) AS invoiced_mtd 
      FROM x3v6.cicprod.sorder soh 
      LEFT OUTER JOIN x3v6.cicprod.bpcustomer bpc 
      ON soh.bpcord_0 = bpc.bpcnum_0 
      LEFT OUTER JOIN x3v6.cicprod.sorderq soq 
      ON soh.sohnum_0 = soq.sohnum_0 
      LEFT OUTER JOIN x3v6.cicprod.sorderp sop 
      ON soq.sohnum_0 = sop.sohnum_0 
      AND soq.soplin_0 = sop.soplin_0 
      AND soq.soqseq_0 = sop.sopseq_0 
      LEFT OUTER JOIN x3v6.cicprod.itmmaster itm 
      ON sop.itmref_0 = itm.itmref_0 
     UNION ALL 
     SELECT SUM(CASE 
        WHEN sih.invtyp_0 = 2 AND 
          MONTH(sih.accdat_0) = MONTH(getdate()) THEN 
         sid.amtnotlin_0 * (-1) 
        ELSE 
         0 
        END) 
      FROM x3v6.cicprod.sinvoice sih 
      LEFT OUTER JOIN x3v6.cicprod.sinvoiced sid 
      ON sih.num_0 = sid.num_0) x; 
+0

返事をいただきありがとうございます。私はおそらくクエリの完全なコンテキストを含める必要があります。ここにあります: –

0

最初にUNIONクエリのCTEを使用してみてください。クエリと同じ構造の簡単な例を次に示します。

;with cteTest AS (

    ((select 2 as 'test')) 
    union all 
    ((select 3 as 'test')) 

) 

select sum(test) from cteTest 
関連する問題