【】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)

------解决方案--------------------
引用:
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