首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一张桌子上的现金和支票

一张桌子上的现金和支票
EN

Stack Overflow用户
提问于 2019-02-15 12:19:12
回答 4查看 135关注 0票数 3

我需要从一张2栏的桌子上得到业务员订购的现金和支票金额的总和。

我的桌子是这样的:

代码语言:javascript
复制
Salesman A  Cash    21151
Salesman B  Cash    34510
Salesman C  Cash    21252
Salesman D  Cash    13356
Salesman A  Cheque  13944
Salesman B  Cheque  87368
Salesman C  Cheque  20182
Salesman D  Cheque  23862

SQL:

代码语言:javascript
复制
SELECT Ca.Cash,  Cr.Credit FROM 
    (SELECT Salesman, PayMode, SUM(Collection) AS Cash
        FROM Prospect_Detail WHERE(Purpose = 'Collections') AND (PayMode = 'Cash')
        GROUP BY Salesman, PayMode) AS Ca 
        CROSS JOIN
    (SELECT Salesman, PayMode, SUM(Collection) AS Credit
        FROM Prospect_Detail WHERE(Purpose = 'Collections') AND (PayMode = 'cheque')
        GROUP BY Salesman, PayMode) Cr

我要得到这样的结果:

代码语言:javascript
复制
Salesman       Cash      Cheque
Salesman A     21151     13944
Salesman B     34510     87368
Salesman C     21252     20182
Salesman D     13356     23862
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-02-15 13:27:24

你可以按以下方式转动你的桌子

代码语言:javascript
复制
With c as(
SELECT Salesman
     , Paymode
     , Sum(Collection) AS Cheque
FROM 
    Prospect_Detail
GROUP BY 
      Salesman
    , Paymode
)
Select Salesman
      ,[Cash]
      ,[Cheque] 
From C
Pivot(
    Sum(Cheque)
    For Paymode in ([Cash],[Cheque]) 
) as pvt;

我希望这对你有用。

票数 2
EN

Stack Overflow用户

发布于 2019-02-15 12:32:54

您可以尝试以下方法。

代码语言:javascript
复制
create table #Temp (name varchar(50), collectionType varchar(10), amount int)
insert into #Temp values
('Salesman A', 'Cash', 21151),
('Salesman B', 'Cash', 34510),
('Salesman C', 'Cash', 21252),
('Salesman D', 'Cash', 13356),
('Salesman A', 'Cheque', 13944),
('Salesman B', 'Cheque', 87368),
('Salesman C', 'Cheque', 20182),
('Salesman D', 'Cheque', 23862)

SELECT name, Cash, cheque 
FROM  
(SELECT collectionType, name , amount 
    FROM #Temp) AS SourceTable  
PIVOT  
(  
SUM(amount)  
FOR collectionType IN ( Cash ,  Cheque)  
) AS PivotTable;

输出如下所示

代码语言:javascript
复制
name        Cash    cheque
--------------------------
Salesman A  21151   13944
Salesman B  34510   87368
Salesman C  21252   20182
Salesman D  13356   23862

您可以找到现场演示这里

票数 5
EN

Stack Overflow用户

发布于 2019-02-15 13:00:25

关于转向的建议在这方面是一个巨大的过于复杂的问题。别理他们。只需使用条件求和。一个简化的例子:

代码语言:javascript
复制
select Salesman, sum(case Paymode when 'Cash' then Collection else 0 end) as Cash, ...
from Prospect_Detail 
where Purpose = 'Collections'
group by Salesman 
order by Salesman;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54709251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档