大概需求如下图所示,横向展示数据,语法不要写死收货方,方便后续添加收货方。
解决方案 »
- 使用exec(@sql)语句返回值的问题
- 只保留相同内容的一行
- [ODBC] 插入一条记录时,如何使用SELECT @@IDENTITY来获取新插入的自增id?
- 求SQL语句。。。。。
- 在批量创建存储过程时,用到了在其后定义的存储过程,怎么才能让系统不报错呢
- GETDATE 和时区的问题
- sqL问题急 再现等。。。。。。。。。
- 有星的来帮帮忙,我计划做一个c/s 结构的连锁商店管理系统,用的是sql 数据库, 如何实现上传数据,和下载数据。
- 服务器端改SA密码,客户端的问题,用友和金蝶不用改客户端是如何做到的
- 在windows2003中怎么也装不上SQL2000,会是什么原因啊。
- 求一个SQL语句的写法
- 列名无效
--测试数据
if not object_id(N'Tempdb..#入库表') is null
drop table #入库表
Go
Create table #入库表([日期] Date,[工单号] nvarchar(26),[收货方] nvarchar(22),[体积] int)
Insert #入库表
select '2017/3/1',N'A30001',N'AA',25 union all
select '2017/3/1',N'A30002',N'BB',35 union all
select '2017/3/1',N'A30003',N'BB',35 union all
select '2017/3/2',N'A30003',N'BB',35
GO
if not object_id(N'Tempdb..#出库表') is null
drop table #出库表
Go
Create table #出库表([日期] Date,[工单号] nvarchar(26),[收货方] nvarchar(22),[体积] int)
Insert #出库表
select '2017/3/1',N'B30001',N'AA',15 union all
select '2017/3/1',N'B30002',N'BB',25 union all
select '2017/3/1',N'B30003',N'BB',5
Go
--测试数据结束DECLARE @sql VARCHAR(MAX);
SET @sql = 'select 日期';
SELECT @sql
= @sql + ',sum(case 收货方 when ''' + 收货方 + ''' then 入库体积 else 0 end)[' + 收货方 + '入库体积]' + ',sum(case 收货方 when '''
+ 收货方 + ''' then 出库体积 else 0 end)[' + 收货方 + '出库体积]'
FROM
(
SELECT DISTINCT
收货方
FROM
(
SELECT t1.*,
t2.出库体积
FROM
(SELECT 日期, 收货方, SUM(体积) AS 入库体积 FROM #入库表 GROUP BY 日期, 收货方) t1
LEFT JOIN
(SELECT 日期, 收货方, SUM(体积) AS 出库体积 FROM #出库表 GROUP BY 日期, 收货方) t2
ON t2.日期 = t1.日期
AND t2.收货方 = t1.收货方
) tab1
) a;
SET @sql
= @sql
+ ' from (SELECT t1.*,
t2.出库体积
FROM
(SELECT 日期, 收货方, SUM(体积) AS 入库体积 FROM #入库表 GROUP BY 日期, 收货方) t1
LEFT JOIN
(SELECT 日期, 收货方, SUM(体积) AS 出库体积 FROM #出库表 GROUP BY 日期, 收货方) t2
ON t2.日期 = t1.日期
AND t2.收货方 = t1.收货方)tab1 group by 日期';
EXEC (@sql);