1
4

2 に答える 2

0

ifc次のような手法で、ステートメントを使用して必要なことを達成できると思います。

select count(distinct ifc(sex='M',name,'DUMMYVALUE')) -1 as number_of_distinct_male_names
from my sashelp.class

'DUMMYVALUE'は一意の男性名のリストに1を追加するため、-1を引く必要があります。

あなたの場合、満たすべき2つの条件があるため、少し複雑になります。したがって、ネストされたifcステートメントが必要になります。

select count(distinct   
             ifc(if_my_condition1_is_met,
                 unique_value,
                 ifc(if_my_condition2_is_met, 
                     alternate_unique_value, 
                     'DUMMY_VALUE')
                ) -1 as number_of_conditional_unique_values
from my table
于 2012-10-25T19:54:37.263 に答える
0

答えは「はい」です。テーブルと列をたどるのは少し難しいと思います。プロバイダーのセットが異なると仮定して、電話番号のないものでカウントを実行し、これを 2 番目のテーブルに結合するカウントと結合します。

クエリは次のようになります。

select PROV_PHONE, count(distinct prv_id) as uni_prv, count(distinct pt_id) as uni_pt
from a
where PRV_SPECIAL_HANDLING='N'
group by prov_phone
union all
select PROV_PHONE, count(distinct prv_id) as uni_prv, count(distinct pt_id) as uni_pt
from a join
     b
     on a.prv_id = b.prv_id
where PRV_SPECIAL_HANDLING='Y'
group by prov_phone

重複がある場合は、グループ化する前にユニオンを実行する必要があります。

select PROV_PHONE, count(distinct prv_id) as uni_prv, count(distinct pt_id) as uni_pt
from ((select PROV_PHONE, prv_id, pt_id
       from a
       where PRV_SPECIAL_HANDLING='N'
       group by prov_phone
      ) union all
      (select PROV_PHONE, b.prv_id, b.pt_id
       from a join
            b
            on a.prv_id = b.prv_id
       where PRV_SPECIAL_HANDLING='Y'
      )
     ) t
 group by prov_phone

に置き換えましcount(unique)count(distinct)。SASは後者をサポートしていると確信しており、それは標準SQLです。

于 2012-10-25T19:25:53.630 に答える