2016-10-31 12 views
1

の列を結合するにはどうすればすべてのPartyId二つのテーブル

  • @t PartyID bigint,PartyName varchar(50)SaleQty decimal(18,2))が、それは会計年度15-16のすべての当事者の 販売履歴が含まれている含まれている3つの一時的な列、

    1. @Pid (PartyId bigint)を持っています。

    2. @ty PartyID bigint,PartyName varchar(50)SaleQty decimal(18,2))これには、 が含まれています。会計年度16-17のすべての当事者の販売履歴。

    は、私は2つの一時テーブル@tと のレコードは、両方の金融レコードの当事者IDが1行でなければならないこと@tyな方法を組み合わせたいです。また、 partyidがテーブル@t@tyのいずれにもエントリを持っていない場合は、 saleQtyはその会計年度のゼロでなければなりません。

    私はこれを解決するために次のクエリを実行しました。

    select A.PartyName,isnull(SUM(A.SaleQty),0) as TotalSale,isnull(SUM(B.SaleQty),0) as TotalSaleB 
    from @t A 
    left join @ty B ON B.PartyId=A.PartyID 
    inner join @Pid P on P.PartyID=A.PartyID and B.PartyID=P.PartyID 
    where PartyName like'%Jain' 
    group by A.PartyID,A.PartyName 
    

    私の出力は

    PartyName    TotalSale(15-16)  TotalSale(16-17) 
    JAIN TRADERS (DHAMPUR) 16682.00     9699.00 
    

    が私の望ましい結果が

    PartyName    TotalSale(15-16)  TotalSale(16-17) 
    JAIN TRADERS (DHAMPUR) 389.00     139.00 
    Sourav Traders   3899.00     0.00 
    Tickrej Traders   0.00      0.00 
    

    あるべきですが、私は、所望の結果を得ることができません。ここで私を助けてください。

  • +2

    私の質問編集 – TheGameiswar

    +0

    電流出力と予想される出力を示してください。年度ごとに? FYを追加した一時テーブルに両方のテーブルを結合します。左は@Pidのテーブルを結合する。それで、あなたはFYまでに総売上を得ることができます。 –

    +0

    あなたは総売上高を望んでいないだろう –

    答えて

    1

    はこれを試してみてください:

    declare @Pid table (PartyId bigint) 
    insert into @Pid values (1) 
    insert into @Pid values (2) 
    insert into @Pid values (3) 
    insert into @Pid values (4) 
    
    
    declare @t table (PartyID bigint, PartyName varchar(50), SaleQty decimal(18,2)) 
    insert into @t values(1, 'a', 10) 
    insert into @t values(1, 'c', 5) 
    insert into @t values(2, 'b', 10) 
    insert into @t values(4, 'b', 20) 
    
    declare @ty table(PartyID bigint,PartyName varchar(50), SaleQty decimal(18,2)) 
    insert into @ty values(1, 'a', 10) 
    insert into @ty values(2, 'c', 15) 
    insert into @ty values(2, 'b', 10) 
    
    
    select c.PartyID as PartyID, ISNULL(sum(A.SaleQty), 0) as TotalSale15_16 into #A 
    from @t A right join @Pid c on A.PartyID = c.PartyId 
    group by C.PartyID 
    
    select c.PartyID as PartyID,ISNULL(sum(B.SaleQty), 0) as TotalSale16_17 into #B 
    from @ty B right join @Pid c on B.PartyID = c.PartyId 
    group by C.PartyID 
    
    select A.PartyID, ISNULL(a.TotalSale15_16, 0) as TotalSale16_17, ISNULL(b.TotalSale16_17, 0) as TotalSale16_17 
    from #A a join #B b on a.PartyID = b.PartyID 
    
    drop table #A 
    drop table #B 
    
    
    result: 
    
    PartyID TotalSale16_17 TotalSale16_17 
    1 15.00 10.00 
    2 10.00 25.00 
    3 0.00 0.00 
    4 20.00 0.00 
    
    1

    あなたが「基本」の表であることを@Pidを必要とし、それに両方のテーブルを結合左。 また、それが中に存在する一時的なものは何でもテーブルからパーティ名を取得するにはCOALESCE(またはISNULL)を使用する必要があります。

    SELECT COALESCE(A.PartyName, B.PartyName), 
         COALESCE(SUM(A.SaleQty, 0)) TotalSale_t, 
         COALESCE(SUM(B.SaleQty, 0)) as TotalSale_ty 
    FROM @Pid C 
    LEFT JOIN @t A ON C.PartyId = A.PartyId 
    LEFT JOIN @ty B ON C.PartyId = B.PartyId 
    GROUP BY A.PartyName, B.PartyName 
    
    +0

    このクエリでは十分ではありません。なぜなら、あるパーティーが何らかの会計年度にビジネスをしていない可能性があり、totalSale_tとTotalSale_tyの両方がゼロでなければならないからです。 –

    +0

    両方ともゼロになり、合体の使用に注意してください。ただし、その場合はパーティ名はnullになります。 –

    +0

    しかし、私はパーティー名を表示したい、これは可能です。 –