MS SQL2000视图查询提示超过了表的最大数目(260)

mbugaifc 2010-12-19 06:14:53
大家好,MS SQL2000视图查询提示超过了表的最大数目(260)。
恳请协助,谢谢!



使用Union all 创建基础视图很简单,如下所示:

ALTER view BQ_业务余额表 as
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
1 as '月份',
sum(case when iPeriod<1 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=3 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
2 as '月份',
sum(case when iPeriod<2 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=3 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
3 as '月份',
sum(case when iPeriod<3 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=3 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
4 as '月份',
sum(case when iPeriod<4 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=4 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
5 as '月份',
sum(case when iPeriod<5 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=5 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
6 as '月份',
sum(case when iPeriod<6 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=6 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
7 as '月份',
sum(case when iPeriod<7 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=7 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
8 as '8月',
sum(case when iPeriod<8 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=8 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
9 as '9月',
sum(case when iPeriod<9 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=9 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
10 as '10月',
sum(case when iPeriod<10 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=10 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
11 as '11月',
sum(case when iPeriod<11 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=11 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
union all
Select
cDwCode as 供应商代码,
cDwName as 供应商名称,
12 as '12月',
sum(case when iPeriod<12 then iCAmount-iDAmount else 0 end) as 期初本币, --期初本币
sum(iCAmount-iDAmount) as 期末本币 --期末本币

FROM UFDATA_111_2010.dbo.Ap_DetailVend
WHERE iFlag<3
AND iPeriod<=12 AND cExch_Name='人民币'
AND cFlag<>'AR'

GROUP BY cDwCode ,cDwName,iPeriod
...全文
136 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
whb147 2010-12-19
  • 打赏
  • 举报
回复
物化一些表后在关联
-晴天 2010-12-19
  • 打赏
  • 举报
回复
每一次 union 就算一个表,不管它是否出自同一个表.
dawugui 2010-12-19
  • 打赏
  • 举报
回复
建议将部分union all后的数据插入到临时表,减少连接的次数,然后再针对临时表进行union all
bancxc 2010-12-19
  • 打赏
  • 举报
回复
太熟悉了 呵呵

111帐套 2010年度

应收 iflag<3
不过lz不是用友的
billpu 2010-12-19
  • 打赏
  • 举报
回复
ufdata 如果我没记错 应该是用友吧
你可以写个存储过程用临时表的方法代替
union all和group by 我怀疑sqlserver是不是也算一个连接
另外就是树哥说的里面有面有视图本来还有连接,这样连接套连接数量就很庞大了
王向飞 2010-12-19
  • 打赏
  • 举报
回复
为啥要这么写呢
百年树人 2010-12-19
  • 打赏
  • 举报
回复
如果‘视图’【UFDATA_111_2010.dbo.Ap_DetailVend】里的表本身很多,这样union all起来就有可能超过260了

可以考虑把视图的数据插入临时表,再union all
mbugaifc 2010-12-19
  • 打赏
  • 举报
回复
大家可以看一下,我下面贴出来的SQL.
只是union all 在一起的。 其实都是基于同一个‘视图’【UFDATA_111_2010.dbo.Ap_DetailVend
】的。
根本,没有交叉260个表。
请高手指引,谢谢!
-晴天 2010-12-19
  • 打赏
  • 举报
回复
这是个什么查询啊,要查那么多表,惊叹!
-晴天 2010-12-19
  • 打赏
  • 举报
回复
提示不是已经说了,你操纵表的数目超出260了?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧