首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL如果同一组中的另一个字段包含特定值,则将该字段相乘

SQL如果同一组中的另一个字段包含特定值,则将该字段相乘
EN

Stack Overflow用户
提问于 2017-02-25 00:23:38
回答 3查看 55关注 0票数 1

我有一个很小的数据集

代码语言:javascript
复制
SELECT PID, PCODE, PVAL
FROM mytable

输出:

代码语言:javascript
复制
PID PCODE PVAL
2   N50   £1,000.00
2   B10   £100.00
2   P40   £500.00
3   B10   £100.00
3   P40   £500.00
4   B10   £100.00
4   P40   £500.00

我想输出相同的字段,除非PID组中有N50的PCODE,那么它们的B10需要减少N50的5%,如下所示。

预期输出:

代码语言:javascript
复制
PID PCODE PVAL
2   N50   £1,000.00
2   B10   £50.00
2   P40   £500.00
3   B10   £100.00
3   P40   £500.00
4   B10   £100.00
4   P40   £500.00

我尝试使用子查询this和case语句,但无法获得匹配的值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-25 00:33:46

您可以使用case表达式和max函数来执行此操作。这假设一个pid只能有一行包含pcode=N50。

代码语言:javascript
复制
select pid,pcode
,case when pcode='B10' then pval-0.05*max(case when pcode='N50' then pval else 0 end) over(partition by pid)
 else pval end as pval
from mytable t

编辑:将结果限制为包含B10代码的年份的一种方法是

代码语言:javascript
复制
select pid,pcode
,case when pcode='B10' then pval-0.05*max(case when pcode='N50' then pval else 0 end) over(partition by pid)
 else pval end as pval
from mytable t
where yearcolumn in (select yearcolumn from mytable where pcode='B10')
票数 1
EN

Stack Overflow用户

发布于 2017-02-25 00:33:36

您可以使用分析函数来执行此操作:

代码语言:javascript
复制
SELECT PID, PCODE,
       (PVAL -
        COALESCE(SUM(CASE WHEN PCODE = 'N50' THEN PVAL * 0.05 END) OVER (PARTITION BY PID), 0)
       ) as PVAL
FROM mytable;

实际上,COALESCE()并不是必需的:

代码语言:javascript
复制
SELECT PID, PCODE,
       (PVAL -
        SUM(CASE WHEN PCODE = 'N50' THEN PVAL * 0.05 ELSE 0 END) OVER (PARTITION BY PID)
       ) as PVAL
FROM mytable;
票数 1
EN

Stack Overflow用户

发布于 2017-02-25 01:25:09

此解决方案仅在主表具有“B10”而第二个表具有“N50”时使用左连接来获取匹配。如果存在匹配项:返回N50 PVAL的5%折扣。如果不匹配:返回PVAL

代码语言:javascript
复制
SELECT t1.PID, T1.PCODE, t1.PVAL - isnull( .05 * t2.PVAL, 0) PVAL
  FROM mytable t1
    left join #mytable t2 
        on t1.PID = t2.PID and t1.PCode = 'B10' and t2.PCode = 'N50'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42443519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档