Sql 如何区分名称并根据名称添加?
名为Sql 如何区分名称并根据名称添加?,sql,sql-server-2008,Sql,Sql Server 2008,名为产品的表和列分别为ID,Pname,利润,亏损,月份。全部的 前六个月的Total=Sum(price)-Sum(Loss),在一个名为Col1的列中,最后六个月的Total=Sum(price)-Sum(Loss)在一个名为Col2的列中,用它们的Pname分隔 样本输入: ID PName Month Profit Loss -- ----- ----- ------ ---- 1 A JAN 5 2 2 B FEB 4
产品的表和列分别为ID
,Pname
,利润
,亏损
,月份
。全部的
前六个月的Total=Sum(price)-Sum(Loss)
,在一个名为Col1
的列中,最后六个月的Total=Sum(price)-Sum(Loss)
在一个名为Col2
的列中,用它们的Pname
分隔
样本输入:
ID PName Month Profit Loss
-- ----- ----- ------ ----
1 A JAN 5 2
2 B FEB 4 2
3 A MAR 10 3
4 B Nov 5 2
预期产量
PName Col1 col2
----- ---- ----
A 10 0
B 2 3
在SQL Server中执行此操作的方法是什么?这似乎可以完成此任务:
declare @t table (ID int not null,PName char(1) not null,Month char(3) not null,
Profit int not null,Loss int not null)
insert into @t(ID,PName,Month,Profit,Loss) values
(1,'A','JAN',5,2),
(2,'B','FEB',4,2),
(3,'A','MAR',10,3),
(4,'B','Nov',5,2)
;With Halves as (
select PName,
CASE WHEN Month in ('Jan','Feb','Mar','Apr','May','Jun') THEN 1
ELSE 2 END as Half,
Profit - Loss as Net
from @t
)
select PName,
COALESCE([1],0) as Col1,
COALESCE([2],0) as Col2
from Halves pivot (SUM(Net) for Half in ([1],[2])) p
我通常不建议使用名为Month
(因为它是一个关键字)的列,并且通常希望它是固定在适当月份的第一个(或者有相关年份,或者也有固定年份)的date
列
我已经采取了一个简化步骤,SUM(Profit)-SUM(Loss)
与SUM(Profit-Loss)
不使用pivot和COALESCE有可能吗?@user3158245-可能吧,但这就像请求帮助使用螺钉连接两块木头,然后在有人建议使用合适的工具之后,然后你问我是否可以不用螺丝刀来做。SUM(利润)-SUM(亏损)和SUM(利润-亏损)是一样的,但是如果我想像SUM(利润)/SUM(亏损)那样除以它,我该怎么做?