sql语句,多列分类汇总问题???

iswjh 2018-05-06 08:27:16
假设表:
支付类型 商品 金额
微信 商品1 80
支付宝 商品2 120
支付宝 商品1 80
微信 商品1 60

如何用GROUP BY生成结果,如下:
商品 金额 微信 支付宝
商品1 220 140 80
...全文
1046 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒笑翻 2018-05-07
  • 打赏
  • 举报
回复
专门为您这个问题解决写的bloghttps://blog.csdn.net/c_lanxiaofang/article/details/80223310
懒笑翻 2018-05-07
  • 打赏
  • 举报
回复
我的是MySQL的

CREATE TABLE test( paytype VARCHAR(10),goods VARCHAR(10),money INT) ENGINE=INNODB; 

INSERT INTO test VALUES('微信','商品1',80);
INSERT INTO test VALUES('支付宝','商品2',120);
INSERT INTO test VALUES('支付宝','商品1',80);
INSERT INTO test VALUES('微信','商品1',60);


SELECT * FROM test


SELECT goods AS "商品",
SUM(money) AS "金额",
SUM(IF(paytype="微信",money,0)) AS "微信",
SUM(IF(paytype="支付宝",money,0)) AS "支付宝"

FROM test
GROUP BY goods
  • 打赏
  • 举报
回复
pivot 可以
RINK_1 2018-05-06
  • 打赏
  • 举报
回复


if OBJECT_ID(N'TEMPDB..#T1') IS NOT NULL
DROP TABLE #T1
GO

CREATE TABLE #T1
(PAYTYPE NVARCHAR(20),
 ITEM NVARCHAR(20),
 AMOUNT INT)

INSERT INTO #T1
SELECT '微信','商品1',80 UNION ALL
SELECT '支付宝','商品2',120 UNION ALL
SELECT '支付宝','商品1',80 UNION ALL
SELECT '微信','商品1',60

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL=ISNULL(@SQL+',','')+'SUM(CASE WHEN PAYTYPE='''+PAYTYPE+''' THEN AMOUNT ELSE 0 END) AS '+PAYTYPE 
FROM (SELECT PAYTYPE FROM #T1 GROUP BY PAYTYPE) AS A

SET @SQL='SELECT ITEM,SUM(AMOUNT) AS TOTAL,'+@SQL+' FROM #T1 GROUP BY ITEM'

EXEC(@SQL)
zrssweet 2018-05-06
  • 打赏
  • 举报
回复
第二个LEFT JOIN TABLE AS TABLE2改成LEFT JOIN TABLE AS TABLE3
zrssweet 2018-05-06
  • 打赏
  • 举报
回复
SELECT TABLE.商品, sum(TABLE.金额) as 金额 ,sum(TABLE2.金额) as 微信,sum(TABLE3..金额) as 支付宝 FROM TABLE LEFT JOIN TABLE AS TABLE2 on TABLE2.商品=TABLE.商品 and TABLE2.支付类型=‘微信’ LEFT JOIN TABLE AS TABLE2 on TABLE3.商品=TABLE.商品 and TABLE3.支付类型=‘支付宝’ group by TABLE.商品

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧