【】MS-SQL-怎样将纵向汇总横向来查询显示出来
【在线等】MS-SQL-怎样将纵向汇总横向来查询显示出来?
------解决方案--------------------
------解决方案--------------------
一、订单表A,表A已进行过简单的汇总,按客户+货品类型:
A1(客户) A2(货品类型) A3(合计数量)
-----------------------------------------------------
cus01 type01 10
cus01 type02 20
cus02 type02 15
cus03 type01 50
cus03 type03 100
......
二、货品类型来源于表T:
T01 (货品类型编号) T02(类型名称)
--------------------------------------------
type01 五金
type02 塑料
type03 铝材
......
三、最后想要能得到如下格式的汇总效果图,从纵向汇总转成横向来展示出来,一个客户只有一条记录,有多少种类型就有多少列汇总结果:
客户 五金 塑料 铝材 ...
-------------------------------------------
cus01 10 20 0
cus02 0 15 0
cus03 50 0 100
......
------解决方案--------------------
IF OBJECT_ID('tempdb..#t1','U') IS NOT NULL DROP TABLE #t1
CREATE TABLE #t1
(
A1 VARCHAR(10)
,A2 VARCHAR(10)
,A3 INT
)
IF OBJECT_ID('tempdb..#t2','U') IS NOT NULL DROP TABLE #t2
CREATE TABLE #t2
(
T01 VARCHAR(10)
,T02 NVARCHAR(20)
)
INSERT INTO #t1
SELECT 'cus01', 'type01', 10 UNION ALL
SELECT 'cus01', 'type02', 20 UNION ALL
SELECT 'cus02', 'type02', 15 UNION ALL
SELECT 'cus03', 'type01', 50 UNION ALL
SELECT 'cus03', 'type03', 100
INSERT INTO #t2
SELECT 'type01', N'五金' UNION ALL
SELECT 'type02', N'塑料' UNION ALL
SELECT 'type03', N'铝材'
DECLARE @Sql NVARCHAR(MAX),@Sql1 NVARCHAR(MAX)
SELECT @Sql=ISNULL(@Sql+',','')+'['+A2+']' FROM #t1 GROUP BY A2
SELECT @Sql1=ISNULL(@Sql1+',','')+'ISNULL('+'['+A.A2+']'+',0) AS '+'['+B.T02+']' FROM #t1 AS A JOIN #t2 AS B ON A.A2=B.T01 GROUP BY A.A2,B.T02
SELECT @Sql=N'SELECT A1,'+@Sql1+'
FROM #t1 a
PIVOT(SUM(A3) FOR A2 IN('+@Sql+')) p'
EXEC(@Sql)
------解决方案--------------------