我想知道你是否可以帮忙解决这个案例陈述。我不知道是否可以使用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 Drape Ave的当前租户。
我需要某种案例陈述来表明这一点:
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 :(得分:1)
这样的东西应该适用于大多数SQL版本:
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。
如果您使用的是支持分析功能的数据库,那么您可以尝试以下
SELECT *,
CASE WHEN COUNT(*) OVER (PARTITION BY Address) = 2 THEN 1 ELSE 2 END AS status
FROM yourTable
答案 1 :(得分: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
答案 2 :(得分:0)
使用2 CASE statements
。 inner query
中的一个用于创建对应的虚拟值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;