SQL Server |基于多行标记实例?

时间:2016-11-15 21:01:00

标签: sql sql-server

我在索赔数据中工作,数据库中有多行。

例如: 声明: 12345 5 行,每个行为不同的服务支付不同的金额。

我想解决的问题是每一行都可以自动定价或手动定价。我试图使用CASE / WHEN逻辑标记数据,以便在索赔中存在任何带有手动价格标志的索赔,FLAG将整个索赔设置为“手动定价”。

以下是数据仓库中数据的外观示例: http://imgur.com/a/QI4iC

以下是我期望逻辑产生的方式: http://imgur.com/a/kNTVm

2 个答案:

答案 0 :(得分:1)

这是你可以实现这一目标的一种方法。

select CLAIMID
    , CLAIMLINE
    , USEMANUAL
    , IsManual.PricingUsed
from Claims c
cross apply
(
    select max(case when USEMANUAL = 'Y' then 'Yes' else 'No' end) as PricingUsed
    from Claims c2
    where c2.CLAIMID = c.CLAIMID
) as IsManual

答案 1 :(得分:1)

您可以使用窗口函数Max()over(SQL Server 2012 +)

Declare @YourTable table (ClaimID int,ClaimLine int,UseManual varchar(10))
Insert Into @YourTable values
(12345,1,'N'),
(12345,2,'N'),
(12345,3,'N'),
(12345,4,'Y'),
(12345,5,'N')

Select *
      ,Manual_Priceing_Used = case when max(UseManual) over (Partition By ClaimID)='Y' then 'Yes' else 'No' end
 From  @YourTable

返回

   ClaimID  ClaimLine   UseManual   Manual_Priceing_Used
    12345   1           N           Yes
    12345   2           N           Yes
    12345   3           N           Yes
    12345   4           Y           Yes
    12345   5           N           Yes