一个比较复杂的SQL语句,关于行转列--------高手请进
这个SQL整了几天了,大家帮看一下,谢了.
有两个表结构如下,要求生成最后的报表格式
银行名有很多个,而且一个公司可能贷几家银行,或贷几次,贷款类型有几种.
1.银行表
银行名 总额
------- -----
农业银行 1000
工商银行 800
商业银行 1200
....
2.贷款记录表
公司名 贷款金额 类型 贷款银行
------ --------- ---- ---------
A公司 50 固贷 农业银行
A公司 50 流贷 商业银行
B公司 100 其它 商业银行
.....
要求生成的SQL视图如下:
(银行有很多,类型也不一定,如果太复杂,类型就那上面三种也行)
类型 农业银行 工商银行 商业银行.....
---- ---------- -------- -------
总额 1000 800 1200 ....
已用总计 50 0 150 .....
固贷合计 50 0 0
流贷合计 0 0 50
其它合计 0 0 100
...
[解决办法]
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 银行名 from (SELECT '总额' AS '类型',总额 AS mon,银行名 FROM 银行表
UNION ALL
SELECT 类型,贷款金额 AS mon,贷款银行 AS 银行名 FROM 贷款记录表)T group by 银行名
set @sql = '[' + @sql + ']'
exec ('select * from (select * from (SELECT ''总额'' AS ''类型'',总额 AS mon,银行名 FROM 银行表
UNION ALL
SELECT 类型,贷款金额 AS mon,贷款银行 AS 银行名 FROM 贷款记录表)T
) a pivot (max(mon) for 银行名 in (' + @sql + ')) b')
/*
固贷NULL50NULL
流贷NULLNULL50
其它NULLNULL100
总额80010001200*/
剩下合计相关,lz自己处理一下即可。 动态处理行列转换,lz参考精华帖。