基于两个不同值

时间:2017-06-23 08:50:47

标签: sql-server tsql sql-server-2012

我有一个包含订单的订单表。

每个订单都有与之相关的特定成本以及订单的状态。

所以我在输出中需要4列。

1st将显示状态ID为1&的记录的计数。 2。 第二个将显示状态ID为1&的记录的成本总和。 2 第三个将显示状态ID不在1和1的记录的计数。 2。 第4个将显示状态ID不在1和1之间的记录的成本总和。 2。

我没有得到如何解决此类问题的方法,因此我不需要多次访问数据库。任何解决方案

2 个答案:

答案 0 :(得分:1)

如果我理解正确,我会举一个简单的例子。 您可以使用SUMCASE 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