这样的多张表如何合并到一张表里?

zxz19 2011-11-17 06:08:41

select lp.ID,lp.Title,count(pic.ID)as Pic
from tb_Loupan lp left join tb_LoupanPics pic on pic.LpId=lp.ID
group by lp.ID,lp.Title

----=======
select lp.ID,lp.Title,Count(ihx.HxId)as Huxing
from tb_Loupan lp left join tb_LoupanInHuxing ihx on ihx.LpId=lp.ID
group by lp.ID,lp.Title

-- ----============
select lp.ID,lp.Title,Count(dp.ID)as Dianping
from tb_Loupan lp left join tb_LoupanDianping dp on dp.LpId=lp.ID
group by lp.ID,lp.Title

----===================
select lp.ID,lp.Title,count(yx.ID)as Yixiang
from tb_Loupan lp left join tb_LoupanYixiang yx on yx.LpId=lp.ID
group by lp.ID,lp.Title



这样四个分别统计查询出来的每个对应的结果分别为:
ID Title Pic
--------------------------------
6 fffffff 0
5 111111111 0
4 ggggggg1 0
3 aaaaa 0

ID Title Hx
------------------------------------------------------
6 fffffff 0
5 111111111 0
4 ggggggg1 0
3 aaaaa 0

ID Title Dp Yx
------------------------------------------------------
6 fffffff 0
5 111111111 3
4 ggggggg1 0
3 aaaaa 2

ID Title Yx
------------------------------------------------------
6 fffffff 0
5 111111111 3
4 ggggggg1 1
3 aaaaa 0

但是这样的结果又该如何如何为这样呢?
ID Title Pic Hx Dp Yx
-----------------------------------
6 fffffff 0 0 0 0
5 111111111 0 0 3 3
4 ggggggg1 0 0 0 1
3 aaaaa 0 0 2 0
...全文
442 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxz19 2011-11-17
  • 打赏
  • 举报
回复
爱新觉罗.毓华和中國風的解答是可以的,
小F和123的回答有点小问题我在另外一帖里也说了,这样查询出来的统计数有被重复统计的,另外这里我再说下这个查询里,order by不能写在子查询里面,会报错

最后谢谢大家的热心帮助!
快溜 2011-11-17
  • 打赏
  • 举报
回复
select
id,title,
sum(case when pic is not null then 1 else 0 end) as pic ,
sum(case when Hx is not null then 1 else 0 end) as Hx ,
sum(case when Dp is not null then 1 else 0 end) as Dp ,
sum(case when Yx is not null then 1 else 0 end) as Yx
from
(
select lp.ID,lp.Title,pic.ID as Pic,ihx.HxId as Hx,dp.ID as Dp,yx.ID as Yx
from tb_Loupan lp
left join tb_LoupanPics pic on pic.LpId=lp.ID
left join tb_LoupanInHuxing ihx on ihx.LpId=lp.ID
left join tb_LoupanDianping dp on dp.LpId=lp.ID
left join tb_LoupanYixiang yx on yx.LpId=lp.ID
order by lp.AddTime desc
) t

group by
id,title
--小F-- 2011-11-17
  • 打赏
  • 举报
回复
;with f as
(
select lp.ID,lp.Title,pic.ID as Pic,ihx.HxId as Hx,dp.ID as Dp,yx.ID as Yx
from tb_Loupan lp
left join tb_LoupanPics pic on pic.LpId=lp.ID
left join tb_LoupanInHuxing ihx on ihx.LpId=lp.ID
left join tb_LoupanDianping dp on dp.LpId=lp.ID
left join tb_LoupanYixiang yx on yx.LpId=lp.ID
order by lp.AddTime desc
)

select
id,title,
sum(case when pic is not null then 1 else 0 end) as pic ,
sum(case when Hx is not null then 1 else 0 end) as Hx ,
sum(case when Dp is not null then 1 else 0 end) as Dp ,
sum(case when Yx is not null then 1 else 0 end) as Yx
from
f
group by
id,title
中国风 2011-11-17
  • 打赏
  • 举报
回复
在另一貼已回復了

select lp.ID,lp.Title,
COUNT(DISTINCT pic.ID) as Pic,
COUNT(DISTINCT ihx.HxId) as Hx,
COUNT(DISTINCT dp.ID) as Dp,
COUNT(DISTINCT yx.ID) as Yx
from tb_Loupan lp
left join tb_LoupanPics pic on pic.LpId=lp.ID
left join tb_LoupanInHuxing ihx on ihx.LpId=lp.ID
left join tb_LoupanDianping dp on dp.LpId=lp.ID
left join tb_LoupanYixiang yx on yx.LpId=lp.ID
GROUP BY lp.ID,lp.Title,
流年筱澈 2011-11-17
  • 打赏
  • 举报
回复
四表联查麻烦,建议 用子查询或者 另外一种联合查询写法
select ID Title Pic Hx Dp Yx from table1,table2,table3,table4
where t1.=t2. and t2.=t3.
where后面连接各自表的主外键
dawugui 2011-11-17
  • 打赏
  • 举报
回复

select t1.id , t1.title , t1.pic , t2.huxing hx , t3.dianping dp , t4.yixiang yx from
(
select lp.ID,lp.Title,count(pic.ID)as Pic
from tb_Loupan lp left join tb_LoupanPics pic on pic.LpId=lp.ID
group by lp.ID,lp.Title
) t1,
(
select lp.ID,lp.Title,Count(ihx.HxId)as Huxing
from tb_Loupan lp left join tb_LoupanInHuxing ihx on ihx.LpId=lp.ID
group by lp.ID,lp.Title
) t2,
(
select lp.ID,lp.Title,Count(dp.ID)as Dianping
from tb_Loupan lp left join tb_LoupanDianping dp on dp.LpId=lp.ID
group by lp.ID,lp.Title
) t3,
(
select lp.ID,lp.Title,count(yx.ID)as Yixiang
from tb_Loupan lp left join tb_LoupanYixiang yx on yx.LpId=lp.ID
group by lp.ID,lp.Title
) t4
where t1.id = t2.id and t1.id = t3.id and t1.id = t4.id
dawugui 2011-11-17
  • 打赏
  • 举报
回复
把四个查询做为子查询,然后通过id,连接.
数据库设计准则及方法论全文共5页,当前为第1页。数据库设计准则及方法论全文共5页,当前为第1页。数据库物理设计的方法论 数据库设计准则及方法论全文共5页,当前为第1页。 数据库设计准则及方法论全文共5页,当前为第1页。 方法一:根据数据库逻辑设计,找到相应数据库产品的实现方法。 对于同一套数据库逻辑设计,不同的数据库产品有不同的实现方法,下面的表格列出了不同数据库产品的实现技术。 逻辑架构 实现技术 对称多处理器(SMP) 基本所有商业数据库都支持 Sharing Nothing架构(多分区数据库) DB2 DPF 、TeraData、Greenplum、Netezza Share Disk架构(共享磁盘) DB2 pureScale、Oracle RAC Sharing Nothing + Share Disk ExaData 方法二:合理设计数据库对象 合理设计对象是数据库的逻辑概念,其设计的好坏除了决定系统功能,有时还会决定系统的性能,其设计主要包括模型的设计,表类型的选择,索引的设计,分区设计,表空间的设计等。 在模型的设计上,我们通常采用第三范式来进行数据库对象的模型设计,但是有时为了性能考虑,我们通常会做一些退化,比如设计一些冗余字段或者多表合并来加快系统的查询性能。例如对于有大量数据的销售流水表,完全按照第三范式来做的话会有一个外键关联客户信息,一个外键关联产品信息。 但是如果系统在运行一段时间后,这三张表的数据变的非常多,那么连接查询的性能将会变得很差,我们通常的做法是再设计一张横向表,将客户信息和产品信息全都放到销售流水表里去,这样应避免了关联查询。 表通常分为很多种,除了基本表外,还有临时表、多维表、分区表、范围集群表、物化视图表等。不同的表有不同的用途,如果错误使用的话,也会对性能有比较大的影响。比如在不需要物化视图的地方使用的物化视图表,那么会对源表的增删改性能造成影响。 数据库设计准则及方法论全文共5页,当前为第2页。数据库设计准则及方法论全文共5页,当前为第2页。 数据库设计准则及方法论全文共5页,当前为第2页。 数据库设计准则及方法论全文共5页,当前为第2页。 合理的使用正确的索引是提高系统执行效率的关键因素,对索引的使用需要注意以下一些问题: 注意LIKE运算符。 注意NULL值。 优化复合索引。 注意索引的相关参数。 注意索引与谓词的关系。 根据查询所使用的列表建立索引。 根据条件语句中的谓词的选择度创建索引。 避免在建有索引的列上使用函数。 在那些需要被排序的列上创建索引。 合理使用include关键词创建索引。 指定索引的排序属性。 数据库的页大小也是在数据库设计的时候就应该确定的,否则一旦实施就很难更改。对于执行随机行读写操作的OLTP(联机事务处理)应用程序,通常最好使用较小的页大小,这样不需要的行浪费的缓冲池空间就会较少。对于一次访问大量连续的OLAP(联机分析处理)应用程序,页大小大一些比较好,这样就能减少读取特定数目的行所需要的I/O请求数,更大的页大小也可以允许您减少索引中的级别数。总之,在满足以上条件的情况下,交易系统使用较小的页更适合,仓储系统使用较大的页更适合。 对表空间的选择,通常的数据库都包含系统管理的表空间和数据库管理的表空间两种类型。系统管理表空间由操作系统的文件系统管理器分配和管理空间,管理灵活但是性能很差。数据库管理的空间由数据库管理程序控制存储空间,表空间容器可使用文件系统或裸设备,虽然管理复杂,但是在性能上会有很大的提升。 方法三:合理设计存储 方法四:优化数据库参数,减少资源竞争 优化配置数据库的参数,包括各种缓存池的大小,内存区的配置,刷新脏页的策略,锁的策略等。虽然各个数据库都不相同,但是所有的出发点都是为了通过数据库参数,降低物理读的次数和发生资源竞争的可能性。 性能评审关注的性能指标: 耗时最长的SQL的平均执行时间。 数据库的平均CPU利用率。 CPU的执行时间、IO等待的时间和锁等待时间。 平均I/O响应时间。 支持峰值IOPS数和MPS数。 物理读和逻辑读的百分比。 有效索引读的百分比。 有效行读的百分比。 数据库设计准则及方法论全文共5页,当前为第3页。数据库设计准则及方法论全文共5页,当前为第3页。 数据库设计准则及方法论全文共5页,当前为第3页。 数据库设计准则及方法论全文共5页,当前为第3页。 性能优化策略 1、数据库、表创建方式的优化 在我们设计概念模型时需要结合业务需求,设计出合理的对象关系和优化的模型结构,在设计物理模型时应该充分考虑创建库表基本策略。 建数据的日志方式 No Logging:不能进行事务处理。 Buffered Log:共享缓存满即刷新写入磁盘。 Unbuffered Log:当一个交易完成时即刷新写入磁盘

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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