Sql 如何使用GROUPBY编写单个查询以获得以下输出

Sql 如何使用GROUPBY编写单个查询以获得以下输出,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有自己的应用程序,可以计算不同支付模式下的总花费。存储数据的数据库如下所示 表创建查询: CREATE TABLE details (ID int, Fname VARCHAR(255), Lname VARCHAR(255), AmountSpentViaPaytm DECIMAL(10,2), AmountSpentViaGpay DECIMAL(10,2), AmountSpentViaNetB DECIMAL(10,2), AmountSpentViaMobi

我有自己的应用程序,可以计算不同支付模式下的总花费。存储数据的数据库如下所示

表创建查询:

CREATE TABLE details
(ID int,
 Fname VARCHAR(255), 
 Lname VARCHAR(255), 
 AmountSpentViaPaytm DECIMAL(10,2), 
 AmountSpentViaGpay DECIMAL(10,2),  
 AmountSpentViaNetB DECIMAL(10,2), 
 AmountSpentViaMobileB DECIMAL(10,2), 
 PaymentType VARCHAR(255), 
 MobileType VARCHAR(255), 
 PRIMARY KEY(ID));

插入查询示例:

INSERT INTO TABLE details VALUES(1, A, A, 350.00, null, null, null, PAYTM, android);
INSERT INTO TABLE details VALUES(1, B, B, null, 3000.00, null, null, GPAY, android);

我希望输出如下所示:

TotalAmountSpentViaPaytmInAndroid   350.00                   
CountOfRowsInPaytmInAndroid          1                         
TotalAmountSpentViaPaytmInIphone    450.00                               
CountOfRowsInPaytmInIphone           1                              
TotalAmountSpentViaGpayInAndroid    4500.00                                 
CountOfRowsInGpayInAndroid           2                             
TotalAmountSpentViaGpayInIphone      0.00                             
CountOfRowsInGpayInIphone            0                             
TotalAmountSpentViaNetBInAndroid    4000.00                             
CountOfRowsInNetBInAndroid           1                              
TotalAmountSpentViaNetBInIphone     7400.00                             
CountOfRowsInNetBInIphone            2                             
TotalAmountSpentViaMobileBInAndroid 4600.00                             
CountOfRowsInMobileBInAndroid        1                             
TotalAmountSpentViaMobileBInIphone   0.00                             
CountOfRowsInPMobileBInIphone        0    
count(*),paymentType,MobileType
1,PAYTM, android
1,PAYTM, iphone
2, GPAY, android
goes on...
我需要使用一个查询来获取所有这些数据,因为多个查询变得非常复杂 由于数据库的大小,导致加载到后端。 我曾尝试使用group by语句,但无法找到解决方案 只需一次查询即可解决上述问题

我尝试的命令是:

SELECT COUNT(*), PaymentType, MobileType
from details
group by PaymentType, MobileType;
输出如下所示:

TotalAmountSpentViaPaytmInAndroid   350.00                   
CountOfRowsInPaytmInAndroid          1                         
TotalAmountSpentViaPaytmInIphone    450.00                               
CountOfRowsInPaytmInIphone           1                              
TotalAmountSpentViaGpayInAndroid    4500.00                                 
CountOfRowsInGpayInAndroid           2                             
TotalAmountSpentViaGpayInIphone      0.00                             
CountOfRowsInGpayInIphone            0                             
TotalAmountSpentViaNetBInAndroid    4000.00                             
CountOfRowsInNetBInAndroid           1                              
TotalAmountSpentViaNetBInIphone     7400.00                             
CountOfRowsInNetBInIphone            2                             
TotalAmountSpentViaMobileBInAndroid 4600.00                             
CountOfRowsInMobileBInAndroid        1                             
TotalAmountSpentViaMobileBInIphone   0.00                             
CountOfRowsInPMobileBInIphone        0    
count(*),paymentType,MobileType
1,PAYTM, android
1,PAYTM, iphone
2, GPAY, android
goes on...

桌子的结构似乎有点奇怪。由于您已经有了付款类型,并且从我看到的情况来看,每行只能存在一种付款类型,因此我希望有一列用于支出,如果是这种情况,可以简单地按PaymentType和MobileType进行分组

SELECT PaymentType, MobileType,  COUNT(*) CountOfRows, Sum(spend) Spent
from details
group by PaymentType, MobileType;
但是,由于您有多个列,我们可以在求和之前将它们相加

SELECT PaymentType, MobileType, COUNT(*) CountOfRows,
  Sum(coalesce(AmountSpentViaPaytm, 0) + 
   coalesce(AmountSpentViaGpay, 0) + 
   coalesce(AmountSpentViaNetB, 0) + 
   coalesce(AmountSpentViaMobileB, 0)) Spent
FROM details
GROUP BY PaymentType, MobileType;

这不会提供您最初要求的文本输出,但会以易于阅读/解释的方式呈现信息。然后,您可以使用一个表示层来表示它(excel、SSRS等)

请不要这样做,然后打开一个新帐户只是为了再次提出相同的问题。澄清原来的问题。@DaleK不得不删除上一个问题。我是这个平台的新手,所以我不知道这些规范。我将更新尝试过的方法。“必须删除前面的问题。”??怎么会?我不知道在什么情况下你必须删除你的问题。@DaleK我收到一条评论说,因为问题的格式无效,所以关闭帖子。即使是这样(这似乎不太可能),你也不应该创建新帐户。