Sql server 如何根据SQL中的其他列值选择布尔列?
我有一个表relation,它存储了Rate和Deal之间的关系。 它看起来像:Sql server 如何根据SQL中的其他列值选择布尔列?,sql-server,Sql Server,我有一个表relation,它存储了Rate和Deal之间的关系。 它看起来像: DealId RateId IsPremium ------------------------------------------------ 1 A True 2 A False 3 B
DealId RateId IsPremium
------------------------------------------------
1 A True
2 A False
3 B False
4 B True
5 B True
6 C False
7 C False
DealId是唯一的,一个RateId可以映射到多个不同的DealId
现在,Buesiness团队要求我提供一份关于此表的报告,但如果此表中的同一RateId已经具有True值,则IsPremium值将更改为True
这意味着,根据请求,我的新报告将是:
DealId RateId IsPremium
------------------------------------------------
1 A True
2 A True
3 B True
4 B True
5 B True
6 C False
7 C False
因为RateId C在原始表中没有真值,所以我将继续用假值显示它
我试图在我的SQL脚本中使用Group BY RateId,但无法处理IsPremium中的值 一种方法是
SELECT DealId,
RateId,
MAX(IsPremium) OVER (PARTITION BY RateId) AS IsPremium
FROM YourTable
我假设您的列是带有字符串true和false的varchar,因为SQLServer没有布尔列。但类似的方法也适用于bit和1/0
SELECT DealId,
RateId,
CAST(MAX(CAST(IsPremium AS INT)) OVER (PARTITION BY RateId) AS BIT) AS IsPremium
FROM YourTable
解决方案3:
with maxi as (
select RateId,
max(cast(ispremium as integer)) ispremium
from test0713 f1
group by RateId
)
select f1.dealid, f2.*
from test0713 f1 inner join maxi f2 on f1.RateId=f2.RateId
with maxi as (
select RateId,
max(cast(ispremium as integer)) ispremium
from test0713 f1
group by RateId
)
select f1.dealid, f2.*
from test0713 f1 inner join maxi f2 on f1.RateId=f2.RateId