0

これが私が取り組んでいる主なクエリで、ほぼ完成しています。最後に追加する必要があるのは、クライアントの最後の 10 件の電話番号です。

    select distinct
        max(case when isnull(d.lastname,'')='' then d.name 
            else d.firstname+' '+(case when isnull(d.middlename,'')='' then '' else d.middlename+' ' end)+d.lastname+
                (case when isnull(d.suffix,'')='' then '' else ' '+d.suffix end) end)
        ,max(isnull(d.street1,p.street1))
        ,max(isnull(d.street2,''))
        ,max(d.city)
        ,max(isnull(d.state,p.state))
        ,max(isnull(d.zipcode,p.zipcode))
        ,max(dbo.stripnondigits(isnull(d.ssn,p.ssn)))
        ,'Add'
        ,'Primary Secondary Flag'
        ,max(m.number)
        , as 'phone1'
        , as 'phone2'
        , as 'phone3'
        , as 'phone4'
        , as 'phone5'
        , as 'phone6'
        , as 'phone7'
        , as 'phone8'
        , as 'phone9'
        , as 'phone10'
    from people p
    inner join master m
        on p.accountid = m.number
    inner join d_table d on p.debtorid=d.debtorid and isnull(d.jobname,'')=''
group by p.pid

phone* 列に、最新の電話番号phone1から次の最新の電話番号などを入力する必要がありますphone2

最後の 10 件の電話番号を取得するクエリは次のとおりです。

select ah.rownumber, ah.number, ah.dateadded, ah.phonenumber
from (SELECT ROW_NUMBER() OVER (partition by number order by dateadded desc) as 'rowNumber', number, dateadded, phonenumber
            FROM phones_master) ah
where rownumber <=10 
order by ah.number, ah.rownumber

このクエリは、個人の最大 (1 から 10) の電話番号を返します。

ah.number = m.number でグループ化します

これら 2 つのクエリを 1 つに結合する方法がわかりません。1 つの電話番号を返すアカウントもあれば、10 を返すアカウントもあります。これら 2 つのクエリを統合することは可能でしょうか? 最初のものはずっと前に別の個人によって書かれたもので、2 番目のクエリを組み込む必要があるだけです。

4

1 に答える 1

1

ここには不必要なレベルのネストがあるかもしれないと思いますが、これはうまくいくはずです:

Select
    name,
    street1,
    street2,
    city,
    state,
    zipcode,
    ssn,
    action,
    flag,
    [number],
    [1] phone1,
    [2] phone2,
    [3] phone3,
    [4] phone4,
    [5] phone5,
    [6] phone6,
    [7] phone7,
    [8] phone8,
    [9] phone9,
    [10] phone10
From (
    select
        [name],
        street1,
        street2,
        city,
        state,
        zipcode,
        ssn,
        action,
        flag,
        p.[number],
        t.rn,
        t.phonenumber
    from (
        select
            max(case when 
                    isnull(d.lastname, '') = '' then d.name 
                    else d.firstname + ' ' + (
                    case when 
                        isnull(d.middlename, '') = '' then '' 
                        else d.middlename + ' ' 
                    end) + d.lastname + (
                    case when
                        isnull(d.suffix, '') = '' then '' 
                        else ' ' + d.suffix 
                    end) 
                end) [name],
            max(isnull(d.street1, p.street1)) street1,
            max(isnull(d.street2,'')) street2,
            max(d.city) city,
            max(isnull(d.state,p.state)) state,
            max(isnull(d.zipcode,p.zipcode)) zipcode,
            max(dbo.stripnondigits(isnull(d.ssn,p.ssn))) ssn,
            'Add' action,
            'Primary Secondary Flag' flag,
            max(m.number) [number]
        from
            people p
                inner join 
            master m
                on p.accountid = m.[number]
                inner join 
            d_table d 
                on p.debtorid = d.debtorid
        where
            isnull(d.jobname, '') = ''
        group by 
            p.pid
        ) p
        left outer join (
            select 
                ah.[number], 
                ah.rn, 
                ah.phonenumber
            from (
                select 
                    [number],
                    row_number() over (partition by [number] order by dateadded desc) rn, 
                    phonenumber
                from
                    phones_master
                ) ah
            where 
                rn <= 10 
        ) t
        on p.[number] = t.[number]
    ) x
pivot (
    max(phonenumber)
for
    rn in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10])
) as piv

これは古い互換性レベルのバージョンです

Select
    name,
    street1,
    street2,
    city,
    state,
    zipcode,
    ssn,
    action,
    flag,
    [number],
    max(case rn when 1 then phonenumber end) phone1,
    max(case rn when 2 then phonenumber end) phone2,
    max(case rn when 3 then phonenumber end) phone3,
    max(case rn when 4 then phonenumber end) phone4,
    max(case rn when 5 then phonenumber end) phone5,
    max(case rn when 6 then phonenumber end) phone6,
    max(case rn when 7 then phonenumber end) phone7,
    max(case rn when 8 then phonenumber end) phone8,
    max(case rn when 9 then phonenumber end) phone9,
    max(case rn when 10 then phonenumber end) phone10
From (
    select
        [name],
        street1,
        street2,
        city,
        state,
        zipcode,
        ssn,
        action,
        flag,
        p.[number],
        t.rn,
        t.phonenumber
    from (
        select
            max(case when 
                    isnull(d.lastname, '') = '' then d.name 
                    else d.firstname + ' ' + (
                    case when 
                        isnull(d.middlename, '') = '' then '' 
                        else d.middlename + ' ' 
                    end) + d.lastname + (
                    case when
                        isnull(d.suffix, '') = '' then '' 
                        else ' ' + d.suffix 
                    end) 
                end) [name],
            max(isnull(d.street1, p.street1)) street1,
            max(isnull(d.street2,'')) street2,
            max(d.city) city,
            max(isnull(d.state,p.state)) state,
            max(isnull(d.zipcode,p.zipcode)) zipcode,
            max(dbo.stripnondigits(isnull(d.ssn,p.ssn))) ssn,
            'Add' action,
            'Primary Secondary Flag' flag,
            max(m.number) [number]
        from
            people p
                inner join 
            master m
                on p.accountid = m.[number]
                inner join 
            d_table d 
                on p.debtorid = d.debtorid
        where
            isnull(d.jobname, '') = ''
        group by 
            p.pid
        ) p
        left outer join (
            select 
                ah.[number], 
                ah.rn, 
                ah.phonenumber
            from (
                select 
                    [number],
                    row_number() over (partition by [number] order by dateadded desc) rn, 
                    phonenumber
                from
                    phones_master
                ) ah
            where 
                rn <= 10 
        ) t
        on p.[number] = t.[number]
    ) x
Group By
    name,
    street1,
    street2,
    city,
    state,
    zipcode,
    ssn,
    action,
    flag,
    [number]
于 2013-10-21T20:35:21.817 に答える