我有一个包含订单的订单表。
每个订单都有与之相关的特定成本以及订单的状态。
所以我在输出中需要4列。
1st将显示状态ID为1&的记录的计数。 2。 第二个将显示状态ID为1&的记录的成本总和。 2 第三个将显示状态ID不在1和1的记录的计数。 2。 第4个将显示状态ID不在1和1之间的记录的成本总和。 2。
我没有得到如何解决此类问题的方法,因此我不需要多次访问数据库。任何解决方案
答案 0 :(得分:1)
如果我理解正确,我会举一个简单的例子。
您可以使用SUM
和CASE WHEN
来实现它。
希望它有所帮助。
DECLARE @SampleData AS TABLE
(
Id int IDENTITY (1,1),
StatusId int,
Cost decimal(10,2)
)
INSERT INTO @SampleData
(
--Id - this column value is auto-generated
StatusId,
Cost
)
VALUES
(1, 10),(2, 10),(3, 20), (4, 20),
(1, 10),(2, 10),(3, 20), (4, 20),
(1, 10),(2, 10),(3, 20), (4, 20)
SELECT
sum(CASE WHEN sd.StatusId IN (1,2) THEN 1 ELSE 0 END) AS TotalCount_1_2,
sum(CASE WHEN sd.StatusId IN (1,2) THEN sd.Cost ELSE 0 END) AS TotalCost_1_2,
sum(CASE WHEN sd.StatusId NOT IN (1,2) THEN 1 ELSE 0 END) AS TotalCount_Not_in_1_2,
sum(CASE WHEN sd.StatusId NOT IN (1,2) THEN sd.Cost ELSE 0 END) TotalCost_Not_in_1_2
FROM @SampleData sd
返回
TotalCount_1_2 TotalCost_1_2 TotalCount_Not_in_1_2 TotalCost_Not_in_1_2
----------------------------------------------------------------------------
6 60.00 6 120.00
答案 1 :(得分:0)
你想要这个。
SELECT COUNT(f1) AS Col1
,SUM(f1) AS Col2
,(SELECT COUNT(f1) FROM yourTable t2 WHERE t1.id1 <> t2.id1 OR t1.id2 <> t2.id2) AS Col3
,(SELECT SUM(f1) FROM yourTable t3 WHERE t1.id1 <> t3.id1 OR t1.id2 <> t3.id2) AS Col4
FROM yourTable t1
GROUP BY id1,id2