SQL l连表查询 求大神帮忙看看

紫九 2013-12-25 10:24:42
select y_num_e,m_num_e,deptname from
(
select sum(re_c.rdlc_num) y_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid
inner join department de on de.dept_id=h.dept_id
inner join s_hse_ticket s on s.reghumsid=h.human_sid
where to_char(re_c.create_date,'yyyy')=to_char(sysdate,'yyyy') and s.erifystate='完成' group by re_c.rdlc_num,de.deptname
union all
select sum(re_c.rdlc_num) m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid
inner join department de on de.dept_id=h.dept_id
inner join s_hse_ticket s on s.reghumsid=h.human_sid
where to_char(re_c.create_date,'mm')=to_char(sysdate,'mm') and s.erifystate='完成' group by re_c.rdlc_num,de.deptname
)
如上 报错m_num_e标识符无效 单查询只有字段y_num_e,deptname 原来这样做没出现过这样的问题
请各位大神看看是不是哪写错了
...全文
100 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫九 2013-12-25
  • 打赏
  • 举报
回复
select sum(re_c.rdlc_num) y_num_e,null m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid inner join department de on de.dept_id=h.dept_id inner join s_hse_ticket s on s.reghumsid=h.human_sid 这做的都是连表查询 不同只有where 后面的判断条件
紫九 2013-12-25
  • 打赏
  • 举报
回复
完成的是次数字段re_c.rdlc_num 但是有三种状态 select * from REPORTVIEWER_count select * from REPORTVIEWER select * from department select * from rec_right select * from hum_list select * from user_list select * from s_hse_ticket 数据来自这几张表
紫九 2013-12-25
  • 打赏
  • 举报
回复

图片 csdn上图太蛋疼了
Yole 2013-12-25
  • 打赏
  • 举报
回复
你是要按部门拼接到一起么?最后的展现形式是啥样的? 给个图或是数据呗!
紫九 2013-12-25
  • 打赏
  • 举报
回复
我这只是两个 总共是六个SQL语句的union all 不同的地方只有where后面的判断条件 要拼接出 年-完成,月-完成,日-完成,申请中,年-作废,月-作废的字段 汇总都是按部门分的,但是表都是一样的 我只有这种思路 不知道这样对不对 你有别的方法吗?
紫九 2013-12-25
  • 打赏
  • 举报
回复
select y_num_e,m_num_e,deptname from ( select sum(re_c.rdlc_num) y_num_e,null m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid inner join department de on de.dept_id=h.dept_id inner join s_hse_ticket s on s.reghumsid=h.human_sid where to_char(re_c.create_date,'yyyy')=to_char(sysdate,'yyyy') and s.erifystate='完成' group by re_c.rdlc_num,de.deptname union all select null y_num_e,sum(re_c.rdlc_num) m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid inner join department de on de.dept_id=h.dept_id inner join s_hse_ticket s on s.reghumsid=h.human_sid where to_char(re_c.create_date,'mm')=to_char(sysdate,'mm') and s.erifystate='完成' group by re_c.rdlc_num,de.deptname ) 你是说是这样吧 我现在没数据 这样会不会影响结果?
md5e 2013-12-25
  • 打赏
  • 举报
回复
select sum(re_c.rdlc_num) as y_num_e,0 as m_num_e, de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid inner join department de on de.dept_id=h.dept_id inner join s_hse_ticket s on s.reghumsid=h.human_sid where datepart(yyyy,re_c.create_date)=datepart(yyyy,sysdate) and s.erifystate='完成' group by re_c.rdlc_num,de.deptname union all select 0 as y_num_e,sum(re_c.rdlc_num) as m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid inner join department de on de.dept_id=h.dept_id inner join s_hse_ticket s on s.reghumsid=h.human_sid where datepart(mm,re_c.create_date)=datepart(mm,sysdate) and s.erifystate='完成' group by re_c.rdlc_num,de.deptname 先建视图,好像union all不能用form(),语法通不过验证 然后 select y_num_e,m_num_e,deptname from 视图
Yole 2013-12-25
  • 打赏
  • 举报
回复
赋个空值是为了对应上面你要查3个字段,而下面拼起来就2个字段.... 要么你select * from 一下!
紫九 2013-12-25
  • 打赏
  • 举报
回复
这两个SQL语句的联合问题出现在第二个SQL的字段查询不出
紫九 2013-12-25
  • 打赏
  • 举报
回复
引用 6 楼 anboat 的回复:
select sum(re_c.rdlc_num) m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid 你这里应该改成: select sum(re_c.rdlc_num) y_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid 使用union all时,两个查询的列名要一样
改成这样还有意义吗 一个是按年查 一个是按月查 你把m_num_e改成y_num_e我后面的where条件还有意义吗
紫九 2013-12-25
  • 打赏
  • 举报
回复
引用 4 楼 u010192842 的回复:

select y_num_e,m_num_e,deptname from
(
select sum(re_c.rdlc_num) y_num_e,'' as m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid
inner join department de on de.dept_id=h.dept_id 
inner join s_hse_ticket s on s.reghumsid=h.human_sid
where to_char(re_c.create_date,'yyyy')=to_char(sysdate,'yyyy') and s.erifystate='完成' 
group by re_c.rdlc_num,de.deptname
union all
select '' as y_num_e ,sum(re_c.rdlc_num) m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid
inner join department de on de.dept_id=h.dept_id 
inner join s_hse_ticket s on s.reghumsid=h.human_sid
where to_char(re_c.create_date,'mm')=to_char(sysdate,'mm') and s.erifystate='完成' 
group by re_c.rdlc_num,de.deptname
)

报错 而且你把''赋值给y_num_e有什么意义?
Nick_Ngai 2013-12-25
  • 打赏
  • 举报
回复
select sum(re_c.rdlc_num) m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid 你这里应该改成: select sum(re_c.rdlc_num) y_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid 使用union all时,两个查询的列名要一样
紫九 2013-12-25
  • 打赏
  • 举报
回复
引用 2 楼 Hsuifengershi 的回复:
换个名字试试 是不是列重复了
那个列重复了? 我这两张表的不同只有where 后面的条件
Yole 2013-12-25
  • 打赏
  • 举报
回复

select y_num_e,m_num_e,deptname from
(
select sum(re_c.rdlc_num) y_num_e,'' as m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid
inner join department de on de.dept_id=h.dept_id 
inner join s_hse_ticket s on s.reghumsid=h.human_sid
where to_char(re_c.create_date,'yyyy')=to_char(sysdate,'yyyy') and s.erifystate='完成' 
group by re_c.rdlc_num,de.deptname
union all
select '' as y_num_e ,sum(re_c.rdlc_num) m_num_e,de.deptname from REPORTVIEWER_count re_c left join hum_list h on re_c.user_id=h.human_sid
inner join department de on de.dept_id=h.dept_id 
inner join s_hse_ticket s on s.reghumsid=h.human_sid
where to_char(re_c.create_date,'mm')=to_char(sysdate,'mm') and s.erifystate='完成' 
group by re_c.rdlc_num,de.deptname
)

紫九 2013-12-25
  • 打赏
  • 举报
回复
引用 1 楼 u010192842 的回复:
union all 用法有问题啊 所查的两个表union all之后是两列数据,你上面select 后面有三个字段,所以是不对滴!
但如过我想让两个表中的字段都出来改则么办?我运行过 只出现第一个表的字段
  • 打赏
  • 举报
回复
换个名字试试 是不是列重复了
Yole 2013-12-25
  • 打赏
  • 举报
回复
union all 用法有问题啊 所查的两个表union all之后是两列数据,你上面select 后面有三个字段,所以是不对滴!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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