0

次のコード:

    select(

    select m.Code + '   ' + cast(m.Completed as varchar(max)) + '   '+ cast(ol.Billed as varchar(max)) + '  ' + cast(m.Delete as varchar (max)) 
    from matterdetails as m
    full join officeledger as ol on ol.id=m.id
    order by ol.Billed desc 

    for xml path(''))

結果を返します

    Code       Completed     Billed        Deleted
    --------   -----------   -----------   -----------
    HK168/03   Mar 30 2012   Aug 17 2011   Mar 30 2012
    HK168/03   Mar 30 2012   Feb 24 2011   Mar 30 2012
    HK168/03   Mar 30 2012   Dec 23 2010   Mar 30 2012
    FT080/03   Apr  4 2012   Mar 29 2012   Apr  4 2012
    FT080/03   Apr  4 2012   Feb  9 2012   Apr  4 2012
    FT080/03   Apr  4 2012   Oct 20 2011   Apr  4 2012

    etc.

一方、私は結果を必要とします

    Code       Completed     Billed        Deleted
    --------   -----------   -----------   -----------
    HK168/03   Mar 30 2012   Aug 17 2011   Mar 30 2012
    FT080/03   Apr  4 2012   Mar 29 2012   Apr  4 2012

    etc.

select top 1結果を制限するためにどこかに挿入する必要があることは知っていますが、どこにあるのかわかりませんol.Billed。どんなアドバイスも素晴らしいでしょう。

4

2 に答える 2

1

これを試してください:各IDの最大請求日と結合します

   select(
    select m.Code + '   ' + cast(m.Completed as varchar(max)) + '   '+ cast(ol.Billed as varchar(max)) + '  ' + cast(m.Delete as varchar (max)) 
    matterdetails as m
    full join (select id, Max(billed) as 'Billed' from officeledger) as ol on ol.id=m.id
        order by ol.Billed desc 
for xml path(''))
于 2012-06-21T13:27:46.293 に答える
1

あなたは置き換えることができます:

full join officeledger as ol on ol.id=m.id

と:

full join (select id,MIN(Billed) as Billed from officeledger group by id) as ol = ol.id = m.id

でこれを行う方法もあるはずROW_NUMBER()ですが、必要がなければ書きません。

于 2012-06-21T13:29:04.817 に答える