计算两列之间的总数
Calculate total between two columns
我有 table 名为 #table 和三列。 SinGroup(无所谓,随便什么),Column1,Column2.
CREATE TABLE #table(
sinGroup NVARCHAR(10)
,column1 INT
,column2 int
);
我有一些数据:
INSERT INTO #table(sinGroup,column1,column2) VALUES
('y1',100,0),
('y2',0,60),
('y3',40,20),
('z1',150,0),
('z2',0,50),
('z3',0,50)
我想知道如何得到这个结果集(c1 - c2 并按 Y 和 Z 分组以及第 1 列下显示的结果):
SinGroup C1 C2
y1 100 0
y2 0 60
y3 40 20
Y 60 0
z1 150 0
z2 0 50
z3 0 50
Z 50 0
还有这样的结果(c1-c2 和每行 grop,结果显示在第 1 列下)
SinGroup C1 C2
y1 100 0
y1 100 0
y2 0 60
y2 -60 0
y3 40 20
y3 20 0
z1 150 0
z1 150 0
z2 0 50
z2 -50 0
z3 0 50
z3 -50 0
编辑:
我试过这样的东西,但我不想要 4 列,结果必须低于 c1。
select sinGroup, column1, column2, sum(column1) - sum(column2) as c
from #table
group by sinGroup,column1,column2
如果可能,请在前端格式化这些数据。 SQL 不是为此类任务设计的语言。
查询 1 SQL Fiddle
WITH summary AS (
SELECT LEFT(sinGroup,1) AS sinGroup, SUM(C1) - SUM(c2) AS total
FROM t1
GROUP BY LEFT(sinGroup,1)
)
SELECT sinGroup,c1,c2
FROM
( SELECT sinGroup,c1,c2, 0 as display_order
FROM t1
UNION ALL
SELECT sinGroup
,CASE WHEN total > 0 THEN total ELSE 0 END AS C1
,CASE WHEN total < 0 THEN total ELSE 0 END AS C2
,1 AS display_order
FROM summary
) t
ORDER BY LEFT(sinGroup,1),display_order,sinGroup
查询 2 SQL Fiddle
SELECT sinGroup,c1,c2
FROM
( SELECT sinGroup,c1,c2, 0 as display_order
FROM t1
UNION ALL
SELECT sinGroup, SUM(C1) - SUM(C2) AS c1, 0 AS C2, 1 as display_order
FROM t1
GROUP BY sinGroup
) t
ORDER BY sinGroup,display_order
我有 table 名为 #table 和三列。 SinGroup(无所谓,随便什么),Column1,Column2.
CREATE TABLE #table(
sinGroup NVARCHAR(10)
,column1 INT
,column2 int
);
我有一些数据:
INSERT INTO #table(sinGroup,column1,column2) VALUES
('y1',100,0),
('y2',0,60),
('y3',40,20),
('z1',150,0),
('z2',0,50),
('z3',0,50)
我想知道如何得到这个结果集(c1 - c2 并按 Y 和 Z 分组以及第 1 列下显示的结果):
SinGroup C1 C2
y1 100 0
y2 0 60
y3 40 20
Y 60 0
z1 150 0
z2 0 50
z3 0 50
Z 50 0
还有这样的结果(c1-c2 和每行 grop,结果显示在第 1 列下)
SinGroup C1 C2
y1 100 0
y1 100 0
y2 0 60
y2 -60 0
y3 40 20
y3 20 0
z1 150 0
z1 150 0
z2 0 50
z2 -50 0
z3 0 50
z3 -50 0
编辑: 我试过这样的东西,但我不想要 4 列,结果必须低于 c1。
select sinGroup, column1, column2, sum(column1) - sum(column2) as c
from #table
group by sinGroup,column1,column2
如果可能,请在前端格式化这些数据。 SQL 不是为此类任务设计的语言。
查询 1 SQL Fiddle
WITH summary AS (
SELECT LEFT(sinGroup,1) AS sinGroup, SUM(C1) - SUM(c2) AS total
FROM t1
GROUP BY LEFT(sinGroup,1)
)
SELECT sinGroup,c1,c2
FROM
( SELECT sinGroup,c1,c2, 0 as display_order
FROM t1
UNION ALL
SELECT sinGroup
,CASE WHEN total > 0 THEN total ELSE 0 END AS C1
,CASE WHEN total < 0 THEN total ELSE 0 END AS C2
,1 AS display_order
FROM summary
) t
ORDER BY LEFT(sinGroup,1),display_order,sinGroup
查询 2 SQL Fiddle
SELECT sinGroup,c1,c2
FROM
( SELECT sinGroup,c1,c2, 0 as display_order
FROM t1
UNION ALL
SELECT sinGroup, SUM(C1) - SUM(C2) AS c1, 0 AS C2, 1 as display_order
FROM t1
GROUP BY sinGroup
) t
ORDER BY sinGroup,display_order