如何在sql server中进行计数和求和

如何在sql server中进行计数和求和,sql,sql-server,Sql,Sql Server,我有下表T1 ID Type Amount 1 1 100 2 2 100 3 2 100 4 2 100 5 1 100 6 1 100 7 2 100 8 1 100 9 1 100 我需要的结果如下

我有下表T1

ID     Type        Amount
1      1           100
2      2           100
3      2           100
4      2           100
5      1           100
6      1           100
7      2           100
8      1           100
9      1           100
我需要的结果如下

TotalRecods  Type1Recods type2Recods  Type1Amount type2Amount
9            5           4            500         400
我正在努力

SELECT     COUNT(id) AS TotalRecords , 
           COUNT(type) AS Type1Records, 
           COUNT(type) AS Type2Records, 
           SUM(Amount ) AS Type1Amount, 
           SUM(Amount) AS Type2Amount 
 FROM         T1
它回来了

TotalRecords Type1Records Type2Records Type1Amount Type2Amount
9            9            9            900         900
我不知道如何根据类型筛选它。也许是我错过的一个简单的步骤

SELECT
        COUNT(*) [TotalRecords],
        COUNT(CASE WHEN [Type] = 1 THEN 1 END) [Type1Records],
        COUNT(CASE WHEN [Type] = 2 THEN 1 END) [Type2Records],
        SUM(CASE WHEN [Type] = 1 THEN [Amount] END) [Type1Amount],
        SUM(CASE WHEN [Type] = 2 THEN [Amount] END) [Type2Amount]
    FROM
        [t];
请注意,若某个类型并没有记录,COUNT将返回0,但SUM的结果将为NULL。如果您还希望从SUM函数得到0结果,则可以像以下那样使用它:

当[Type]=1时,SUMCASE,然后[Amount]否则0结束[Type1Amount]

请注意,若某个类型并没有记录,COUNT将返回0,但SUM的结果将为NULL。如果您还希望从SUM函数得到0结果,则可以像以下那样使用它:


SUMCASE当[Type]=1时,则[Amount]否则0结束[Type1Amount]

您可以使用CASE表达式来实现它

质疑


您可以通过使用大小写表达式来实现它

质疑

试试这个:

 SELECT     COUNT(id) AS TotalRecods , 
               (SELECT COUNT(type) FROM T1 WHERE type = 1) AS Type1Recods, 
               (SELECT COUNT(type) FROM T1 WHERE type = 2) AS Type2Recods, 
               (SELECT SUM(Amount ) FROM T1 WHERE type = 1) AS Type1Amount, 
               (SELECT SUM(Amount ) FROM T1 WHERE type = 2) AS Type2Amount 
     FROM   T1
试试这个:

 SELECT     COUNT(id) AS TotalRecods , 
               (SELECT COUNT(type) FROM T1 WHERE type = 1) AS Type1Recods, 
               (SELECT COUNT(type) FROM T1 WHERE type = 2) AS Type2Recods, 
               (SELECT SUM(Amount ) FROM T1 WHERE type = 1) AS Type1Amount, 
               (SELECT SUM(Amount ) FROM T1 WHERE type = 2) AS Type2Amount 
     FROM   T1

如果类型为1,则金额结束为缺失;如果类型为1,则金额结束为缺失;如果类型为1,则金额结束为缺失;如果类型为1,则金额结束为缺失syntax@Jodrell:是的,我知道。是的,但是很晚,总和和计数可以用这个互换syntax@Jodrell:是的,我知道。