2017-05-23 10 views
0

このケースステートメントで援助できるかどうかは疑問です。私はこれがcaseステートメントを使って、または関数が必要とするかどうかを知ることができません。含まれるケースステートメント

それでは、私が持っていることは、以下のデータです:

Group Name |  Address  | Contact Name | Group_Type 
MR A Haplin  4 Fox Close   Alfred Haplin  Current Tenant 
MR D Yoti  4 Fox Close   David Yoti  Former Tenant 
MRS S Pox  1 Drape Ave   Shelly Pox  Current Tenant 

したがって、上記のデータのために、私は近くに4キツネに現在および過去のテナントを持っており、1ドレープアベニューにあるだけで、現在のテナント

私はこのことを示すために、case文のいくつかの種類が必要になります。

Group Name |  Address  | Contact Name | Group_Type  | CASE 
MR A Haplin  4 Fox Close   Alfred Haplin  Current Tenant   1 
MR D Yoti  4 Fox Close   David Yoti  Former Tenant   1 
MRS S Pox  1 Drape Ave   Shelly Pox  Current Tenant   2 

だけでなしに、現在のテナントを示しあれば旧テナントと現在のテナントを含むすべてのアドレスのために、私は、1を表示する必要があります元テナント、私は2を表示する必要があります。

私はこれに使用できるケースステートメントはありますか?または関数を作成する必要がありますか?このような

+0

使用しているSQLのどのバージョン? –

答えて

1

何かがSQLのほとんどのバージョンで動作するはずです:これは確実に働くだろう、すべてのアドレスが一意であれば、すなわち2つの異なるグループや連絡先が同じアドレスに存在して発生しません

SELECT t1.*, t2.status 
FROM yourTable t1 
INNER JOIN 
(
    SELECT Address, 
      CASE WHEN COUNT(*) = 2 THEN 1 ELSE 2 END AS status 
    FROM yourTable 
    GROUP BY Address 
) t2 
    ON t1.Address = t2.Address 

。しかし、何らかの種類の主キー列を使用してグループ化する方がよいでしょう。 ID。

あなたは分析関数をサポートするデータベースを使用している場合は、2 CASE statementsを使用し

SELECT *, 
     CASE WHEN COUNT(*) OVER (PARTITION BY Address) = 2 THEN 1 ELSE 2 END AS status 
FROM yourTable 
0
Select t1.*,case when t2.count_address=1 Then 2 Else 1 end as Case_Column 
from table1 t1 
inner join 
(
select address,count(*)as count_address from table1 
group by address 
)t2 
on t1.address=t2.address 
0

次のことを試みることができます。 inner queryに1人はcasとしてダミーの値を対応する

はこれを試してみてください必要なフラグを取得するためにouter queryでそれを使用できるように作成します -

Select a.*, case when cas>2 then 1 else cas end as case 
from 
your_table_name a 
inner join 
(
Select Address, sum(case when Group_Type='Current Tenant' then 2 
       when Group_Type='Former Tenant' then 3 
       else 0 end) as cas 
from 
your_table_name 
group by Address 
) b 
on a.Address=b.Address; 
関連する問題