用例在sql中添加不同的值
有一个名为Product的表,其中包含三列-用例在sql中添加不同的值,sql,sql-server-2008,Sql,Sql Server 2008,有一个名为Product的表,其中包含三列-名称、id和价格。 在下面的查询中,我想做一些类似的事情,比如如果id 1、2和3存在,则添加id 1.id 2和id 3的价格,或者如果只有id 1和2存在,则仅添加id 1和id 2的价格 select name, id, case when id in(1,2,3) then sum(price) as total else ' ' end case when id in(4,
名称、id和价格
。
在下面的查询中,我想做一些类似的事情,比如如果id 1、2和3存在,则添加id 1.id 2和id 3的价格,或者如果只有id 1和2存在,则仅添加id 1和id 2的价格
select
name,
id,
case
when id in(1,2,3) then sum(price) as total
else ' '
end
case
when id in(4,5,6) then sum (price) as total
else ' '
end
from
Product
group by
name,
id;
但它不能正常工作
样本数据:
Name ID PRICE
A 1 30
B 2 10
C 5 20
预期产出:
NAME ID TOTAL
A 1 40
B 2 40
C 5 20
假设您有一个唯一的Id,您可以尝试
Sum()Over()
:
结果和:
| NAME | ID | NEWPRICE |
|------|----|----------|
| A | 1 | 40 |
| B | 2 | 40 |
| C | 5 | 20 |
共享一些示例数据和预期结果您需要从
选择和分组中删除“price”,否则总和基本上没有作用。但我仍然无法按我所希望的方式工作您希望得到什么以及您实际得到什么?在您的预期输出中,“C”的ID应该是3还是5?谢谢你你能描述一下Over()在这里到底做了什么吗?当然,Over()
子句用于在对数据求和之前对数据进行分区。除此之外,我还使用了案例表达式
将Id值(1,2,3)分组在一起。我发现您未编辑的答案更容易。你能解释一下吗?两者都做了相同的事情,但我最初的回答使用了一个额外的大小写表达式。只需暂时忘记Over()子句中的大小写,那么您将得到每行中所有ID的总和,即newPrice。下一步是将分区内的ID 1、2、3分组,以获得分组ID的总数。清楚吗?更多关于谢谢,但你能告诉我一些关于我的其他部分吗?
| NAME | ID | NEWPRICE |
|------|----|----------|
| A | 1 | 40 |
| B | 2 | 40 |
| C | 5 | 20 |