如何解决根据标志创建计算列-TSQL
我想基于标志计算订单总和。 样本表:
+--------------+---------------+---------------+
| Order | Flag | Amount |
+--------------+---------------+---------------+
| Order1 | Yes | 500 |
| Order1 | Yes | 325 |
| Order2 | Yes | 799 |
| Order2 | No | 550 |
| Order2 | Yes | 675 |
| Order3 | No | 800 |
+--------------+---------------+---------------+
我想创建2个新列。
一栏是订单总数,另一栏是标志为“是”的订单总数。
上面示例表中的所需结果:
+--------------+---------------+---------------+---------------+---------------+
| Order | Flag | Amount | TotalAmount | Yes_amount |
+--------------+---------------+---------------+---------------+---------------+
| Order1 | Yes | 500 | 825 | 825 |
| Order1 | Yes | 325 | 825 | 825 |
| Order2 | Yes | 799 | 2024 | 1474 |
| Order2 | No | 550 | 2024 | 1474 |
| Order2 | Yes | 675 | 2024 | 1474 |
| Order3 | No | 800 | 800 | 0 |
+--------------+---------------+---------------+---------------+---------------+
我尝试了以下代码来获取TotalAmount列:
SUM(AMOUNT) OVER (PARTITION BY ORDER) AS TOTAL_AMOUNT.
有人可以通过Yes_amount栏帮助我吗?
解决方法
在sum()
函数内使用CASE
语句。
样本数据
declare @MyTable table
(
[Order] nvarchar(10),[Flag] nvarchar(3),[Amount] int
);
insert into @MyTable ([Order],[Flag],[Amount]) values
('Order1','Yes',500),('Order1',325),('Order2',799),'No',550),675),('Order3',800);
解决方案
select mt.[Order],mt.[Flag],mt.[Amount],SUM(AMOUNT) OVER (PARTITION BY [ORDER]) AS 'TOTAL_AMOUNT',SUM(case when [Flag]='Yes' then AMOUNT else 0 end) OVER (PARTITION BY [ORDER]) AS 'Yes_AMOUNT'
from @MyTable mt;
结果
Order Flag Amount TOTAL_AMOUNT Yes_AMOUNT
---------- ---- ----------- ------------ -----------
Order1 Yes 500 825 825
Order1 Yes 325 825 825
Order2 Yes 799 2024 1474
Order2 No 550 2024 1474
Order2 Yes 675 2024 1474
Order3 No 800 800 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。