Sql server 如何根据SQL中的其他列值选择布尔列?

Sql server 如何根据SQL中的其他列值选择布尔列?,sql-server,Sql Server,我有一个表relation,它存储了Rate和Deal之间的关系。 它看起来像: DealId RateId IsPremium ------------------------------------------------ 1 A True 2 A False 3 B

我有一个表relation,它存储了Rate和Deal之间的关系。 它看起来像:

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