T1为产品销量表,T2为产品表,T3为客户表 (T1、T2产品相同,T1、T3客户相同) ,T3客户信息是动态的,T3客户一变T4表肯定变,要统计T4表的样式,根据T2所有产品列出14年1月份的合计数量与金额,样式T4,请问该如何写SQL语句,2000环境?
T1
产品 客户 数量 金额 日期
001 杭州 1 10 2014-01-05
001 杭州 2 14 2014-01-10
002 上海 1 3 2014-01-20
T2
产品 名称
001 苹果
002 香蕉
003 水蜜桃
T3
地区 客户
浙江 杭州
上海 上海
.. ..
统计2014年1月销售表:T4
产品 名称 杭州|数量 杭州|金额 上海|数量 上海|金额 ..数量 额 合计|数量 合计|金额
001 苹果 3 24 0 0 .. .. 3 24
002 香蕉 0 0 1 3 .. .. 1 3
003 水蜜桃 0 0 0 0 .. .. 0 0
------解决方案--------------------
IF EXISTS(SELECT NAME FROM sys.objects AS o WHERE NAME = 't1')
DROP TABLE t1
GO
CREATE TABLE t1(id VARCHAR(03) , custnm NVARCHAR(10) , qty INT , amt INT , [date] DATE)
GO
INSERT INTO t1
SELECT '001' , N'杭州' , 1 , 10 , '2014-01-05' UNION ALL
SELECT '001' , N'杭州' , 2 , 14 , '2014-01-05' UNION ALL
SELECT '002' , N'上海' , 1 , 3 , '2014-01-05'
GO
IF EXISTS(SELECT NAME FROM sys.objects AS o WHERE NAME = 't2')
DROP TABLE t2
GO
CREATE TABLE t2(diqu NVARCHAR(4) , custnm NVARCHAR(10))
GO
INSERT INTO t2
SELECT N'浙江', N'杭州' union all
SELECT N'上海', N'上海'
GO
IF EXISTS(SELECT NAME FROM sys.objects WHERE NAME = 't3')
DROP TABLE t3
GO
CREATE TABLE t3(id VARCHAR(3) , NAME NVARCHAR(3))
GO
INSERT INTO t3
SELECT '001' , N'苹果' union all
SELECT '002' , N'香蕉' union all
SELECT '003' , N'水蜜桃'
---执行查询-------------------------------
DECLARE @sql NVARCHAR(MAX)
SELECT @sql = ISNULL(@sql , '') + N' sum(case when custnm = N''' + custnm + ''' then qty else 0 end) as [' +custnm+N'
------解决方案--------------------
数量]'
+N' , sum(case when custnm = N''' + custnm + N''' then amt else 0 end) as ['+custnm+N'
------解决方案--------------------
金额]'+ N',' FROM t2
SET @sql = 'SELECT t3.id , t3.name,'+ left(@sql , LEN(@sql) - 1 ) + N', sum(qty) as [合计
------解决方案--------------------
数量] , sum(amt) as [合计
------解决方案--------------------
金额] from t1 right join t3 on t1.id = t3.id group by t3.id,t3.name order by t3.id'
PRINT @sql
EXEC(@sql)
/* 查询结果
id name 杭州
------解决方案--------------------
数量 杭州
------解决方案--------------------
金额 上海