当前位置: 代码迷 >> Sql Server >> ? 简略SQL语句,动态表 ?
  详细解决方案

? 简略SQL语句,动态表 ?

热度:41   发布时间:2016-04-24 10:57:14.0
??? 简单SQL语句,动态表 ???
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 杭州
------解决方案--------------------
数量       杭州
------解决方案--------------------
金额       上海
  相关解决方案