请教一sql语句

rtfvj 2009-08-07 03:08:49
table1
id 部门 (下属部门的命名规则为:上级名称+部门名称)
0 分公司1
1 分公司1财务部
2 分公司1管理处
3 分公司2
4 分公司2财务部
5 分公司2管理处

table2
部门 收入
1 300
2 400
1 500
5 100
4 300
5 500

需要得到
部门 收入
分公司1 1200
分公司1财务部 800
分公司1管理处 400
分公司2 900
分公司2财务部 300
分公司2管理处 600
...全文
279 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
随风落梦 2009-08-08
  • 打赏
  • 举报
回复
好复杂哦!!
goodbetter_4107607 2009-08-08
  • 打赏
  • 举报
回复
换个方面说,不好写出Sql的原因就是因为表设计的不合理。
table1连第一范式都没有满足(字段属性的原子性)
如果可以的话,建议重新设计两个表,如下:
table1:公司信息
公司Id 公司名 公司的其他信息
1 子公司1 其他信息..
2 子公司2 其他信息..
公司Id为主键

table2:部门信息
部门序号 部门名称 所属公司Id 部门其他信息
1 财务部 1 其他信息..
2 管理部 1 其他信息..
所属公司Id为外键

table3:部门收入
部门序号 收入
1 XXX元
2 XXX元

如果是自己使用的表的话建议这么设计,如果数据是其他人直接给你的话(比如放到Excel里之类),只能将就着这么统计了,但是在储存结果的时候最好按这么设计储存。


SQL77 2009-08-08
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 rtfvj 的回复:]
老大:
  还是有问题啊:ORA-00904: "A"."ID": 标识符无效


[/Quote]
兄弟,主要是你那个不要加双引号,加了肯定会不对了,你是程序中执行吗?
inthirties 2009-08-08
  • 打赏
  • 举报
回复
是oracle里还是sqlserver里。
rtfvj 2009-08-08
  • 打赏
  • 举报
回复
老大:
还是有问题啊:ORA-00904: "A"."ID": 标识符无效

inthirties 2009-08-08
  • 打赏
  • 举报
回复
Oracle里的方案

SQL> select * from dept_t;
ID NAME
---------- -------------
0 分公司1
1 分公司1财务部
2 分公司1管理处
3 分公司2
4 分公司2财务部
5 分公司2管理处

SQL> select * from dept_income_t;
部门 收入
---------- ----------
1 300
1 500
2 400
4 300
5 100
5 500


SQL>select a.name, sum(收入) from dept_t a left join (select a.*, b.收入 from dept_t a, dept_income_t b where a.id=b.部门) b on charindex(b.name, a.name)=1 group by a.name, a.id order by a.id


这里还有oracle的方式
http://topic.csdn.net/u/20090808/09/f9d8a2f0-f8f8-4b8e-ba64-f4652ee93a41.html?seed=1663539616&r=58928556#r_58928556
rtfvj 2009-08-08
  • 打赏
  • 举报
回复
不行啊
芽疼 2009-08-08
  • 打赏
  • 举报
回复
帮顶...我sql很菜
zgke 2009-08-08
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 rtfvj 的回复:]
为什么老是有错
http://sites.google.com/site/woxihaoyintian/yun/wubiaotitiezi-1


[/Quote]

table2.id 改成t2.id 看看
POWER_WONG 2009-08-08
  • 打赏
  • 举报
回复
关注下!
rtfvj 2009-08-08
  • 打赏
  • 举报
回复
期待高手中。。。
rtfvj 2009-08-08
  • 打赏
  • 举报
回复
为什么老是有错
http://sites.google.com/site/woxihaoyintian/yun/wubiaotitiezi-1

lsd123 2009-08-07
  • 打赏
  • 举报
回复
.
haifengyu02 2009-08-07
  • 打赏
  • 举报
回复
12楼正解
感觉不保险可以这样

Select c.部门,
(
Select Sum(收入) from Table2 Left Join Table1 on Table2.部门=Table1.id where Table1.部门 Like
RTRIM(c.部门)+'%'
) from Table1 c
rtfvj 2009-08-07
  • 打赏
  • 举报
回复
方便MSN联系吗?
我的txl_wushihua@hotmail.com
SQL77 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 rtfvj 的回复:]
这次能看见吗
[/Quote]
看不到,你说一下你的语句,怎么会变成双引号了呢???
love_cloud 2009-08-07
  • 打赏
  • 举报
回复
学习一下
rtfvj 2009-08-07
  • 打赏
  • 举报
回复


这次能看见吗
SQL77 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 rtfvj 的回复:]
如图

[/Quote]
看不到,哦,
rtfvj 2009-08-07
  • 打赏
  • 举报
回复
如图
加载更多回复(21)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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