首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >结果数据集中的SQL Case表达式问题

结果数据集中的SQL Case表达式问题
EN

Stack Overflow用户
提问于 2019-05-15 07:10:54
回答 1查看 57关注 0票数 -1
代码语言:javascript
复制
SELECT  
    b.Product_Code,
    b.Account_Id,
    b.Channel_Desc,
    r.Min_Range, r.Max_Range,
    b.Balance AS openingbalance,
    CASE 
       WHEN b.Balance > r.Max_Range
          THEN r.Max_Range - r.Min_Range
          ELSE b.Balance - r.Min_Range
    END AS Split_Balance,
    (CASE 
        WHEN b.Balance > r.Max_Range THEN r.Max_Range - r.Min_Range
        ELSE b.Balance - r.Min_Range
     END) / balance AS weighted_Avg
FROM 
    [EDH_DM_PRD].[dbo].[DataMart_Deposit] AS b
JOIN 
    [DBStats].[dbo].[Split_balances] AS r ON b.Product_Code = r.Product_Code 
                                          AND b.Channel_Desc = r.Channel_Desc
                                          AND b.Asat_Dt = '20190131'
                                          AND b.Acct_Status_Desc  = 'Open'
                                          AND b.Balance >= 0 
                                          AND b.Product_Code = '2000-0100'
                                          AND b.Channel_Desc = 'Broker BDMs'
                                          AND b.Account_Id = '31179111'
ORDER BY 
    Account_Id, Channel_Desc, Min_Range

此SQL查询返回以下结果集:

代码语言:javascript
复制
| Product_Code | Account_Id | Channel_Desc | Min_Range | Max_Range       | openingbalance | Split_Balance | weighted_Avg           |
| 2000-0100    | 31179111   | Broker BDMs  | 0.000     | 4999.990        | 122314.480     | 4999.990      | 0.04087815277471645221 |
| 2000-0100    | 31179111   | Broker BDMs  | 5000.000  | 9999.990        | 122314.480     | 4999.990      | 0.04087815277471645221 |
| 2000-0100    | 31179111   | Broker BDMs  | 10000.000 | 19999.990       | 122314.480     | 9999.990      | 0.08175638730590196679 |
| 2000-0100    | 31179111   | Broker BDMs  | 20000.000 | 49999.990       | 122314.480     | 29999.990     | 0.24526932543064402513 |
| 2000-0100    | 31179111   | Broker BDMs  | 50000.000 | 99999999999.990 | 122314.480     | 72314.480     | 0.59121765468814485414 |

在结果集中,应该只在第一行指定"openingbalance“。其余的行应将"openbalance“显示为0。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-15 07:28:13

您没有指定您使用的是什么RDBMS,但是您需要CASE WHEN 1 == ROW_NUMBER() OVER (...) THEN b.Balance ELSE 0 END或您的DB支持的任何等效数据库。

要确定OVER子句中的确切内容,您必须更清楚地指定“第一行”是什么。如果从字面上看第一行,您可以只使用OVER (ORDER BY Account_Id,Channel_Desc,Min_Range),但这可能不是您想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56139771

复制
相关文章

相似问题

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