解决方案 »
- 求助一个交叉表的写法
- 执行不了,错在哪里
- VS 2005下调试MS SQL Server 2005存储过程设置断点无效
- 既然系统提供的函数都属于公共的,那么为什么有的函数前要加两个@@ 符号呢??
- 与大家讨论用友软件的权限严谨性问题
- 动态SQL赋值
- 那里有mssql6.5下载啊??急用``
- 如何用存储过程实现自动统计sqlserver所有数据库的大小和日志大小
- MM急救,首先谢谢刚才各位的解答,看看如何删除记录!!
- 斑竹要加强帖子管理,有些人问题解决但不结贴,坚决给予黑名单暴光。如:comeonliu(comeonliu)
- 数据分组汇总后运算
- 纠结的问题,问了N多人,GO了好多次没解决的问题,高手请查看一下。
from table1 as su left join table2 as ine on su.Ubz=ine.Ubz
left join ItemDate as idt on ine.ItemName=idt.ItemBz
where su.UName='张三' and ine.ItemTime between '2012-12-01' and '2012-12-30' 结果如下
UName utime item ItemName
张三 2012-12-01 3 搬箱子
上三 2012-12-01 7 搬电脑完成次数不知道怎么弄了??
问题一:
table2 需要完成动作次数表(item为次数,utime为需要完成次数的时间月份)
usid item utime itemID
001 3 2012-12-01 101
002 2 2012-12-01 102
101 7 2012-12-01 104
这里的101因该是001吧
问题二:
tableA 完成动作表(A)--inptime为完成时间,--did为数据ID
did inptime
1 2012-12-01
2 2012-11-03
3 2012-12-03
tableB 完成动作表(B)--RName 为人名
did RName
1 张三
1 李四
2 张三
3 张三
3 李四
tableC 完成动作表(C)--itemName动作名称
did itemName
1 搬箱子
1 搬椅子
2 搬椅子
3 搬箱子
3 搬椅子 我猜其实这3张表是想表达这么个意思对么?(如果是,你上面的3张表这样设计感觉有问题的。)
张三 搬箱子 2012-12-01
李四 搬椅子 2012-12-01
张三 搬椅子 2012-11-03
张三 搬箱子 2012-12-03
李四 搬椅子 2012-12-03
-------------------应该完成部分----------------
--创建表table1
if OBJECT_ID('table1','u') is not null
drop table table1
create table table1
(
UName nvarchar(20),
Usid nvarchar(20)
)
go
insert into table1
select '张三','001' union all
select '李四','002'--创建表table2
if OBJECT_ID('table2','u') is not null
drop table table2
create table table2
(
usid nvarchar(20),
item int,
utime Date,
itemID nvarchar(20)
)
go
insert into table2
select '001',3,'2012-12-01','101' union all
select '002',2,'2012-12-01','102' union all
select '001',7,'2012-12-01','104'
--创建表table3
if OBJECT_ID('table3','u') is not null
drop table table3
create table table3
(
itemID nvarchar(20),
itemName nvarchar(20),
)
go
insert into table3
select '101','搬箱子' union all
select '102','搬椅子' union all
select '103','搬桌子' union all
select '104','搬电脑'
-------------------实际完成部分----------------
--创建表TableA
if OBJECT_ID('TableA','u') is not null
drop table TableA
create table TableA
(
did int,
inptime date
)
go
insert into TableA
select 1,'2012-12-01' union all
select 2,'2012-11-03' union all
select 3,'2012-12-03'
--创建表TableB
if OBJECT_ID('TableB','u') is not null
drop table TableB
create table TableB
(
did int,
RName nvarchar(20)
)
go
insert into TableB
select 1,'张三' union all
select 1,'李四' union all
select 2,'张三' union all
select 3,'张三' union all
select 3,'李四'
--创建表TableC
if OBJECT_ID('TableC','u') is not null
drop table TableC
create table TableC
(
did int,
itemName nvarchar(20)
)
go
insert into TableC
select 1,'搬箱子' union all
select 1,'搬椅子' union all
select 2,'搬椅子' union all
select 3,'搬箱子' union all
select 3,'搬椅子'select *From TableA
select *From TableB
select *From TableC
-------------------SQL部分------------------
--查询每个人应该完成动作次数
select T1.UName,T3.itemName,T2.item from table1 T1
inner join table2 T2 on T1.Usid = T2.usid
inner join table3 T3 on T2.itemID =T3.itemID--查询每个人最终完成的次数
select B.RName,C.itemName,count(itemName) 完成次数 from TableA A
inner join TableB B on A.did =B.did
inner join TableC C on A.did=C.did
group by b.RName,C.itemName--最终SQL
select A.UName,A.itemName,A.item 需要完成动作次数,isnull(b.完成次数,0) 完成次数 from
(select T1.UName,T3.itemName,T2.item from table1 T1
inner join table2 T2 on T1.Usid = T2.usid
inner join table3 T3 on T2.itemID =T3.itemID) A left join(select B.RName,C.itemName,count(itemName) 完成次数 from TableA A
inner join TableB B on A.did =B.did
inner join TableC C on A.did=C.did
group by b.RName,C.itemName) B on A.UName =B.RName and A.itemName=B.itemName where A.UName='张三'--结果集
--张三 搬箱子 3 2
--张三 搬电脑 7 0
select B.RName,C.itemName,count(itemName) 完成次数 from TableA A inner join TableB B on A.did =B.didinner join TableC C on A.did=C.didgroup by b.RName,C.itemName
这段代码 在我这边运行 怎么把张三 搬箱子 统计成了4次??
--查询每个人最终完成的次数
select B.RName,C.itemName,count(itemName) 完成次数 from TableA A
inner join TableB B on A.did =B.did
inner join TableC C on A.did=C.did
group by b.RName,C.itemName--执行结果
--李四 搬箱子 2
--张三 搬箱子 2
--李四 搬椅子 2
--张三 搬椅子 3
on a.customer.num=b.num inner join outmoney as c
on b.bill_no=c.bill_num
group by a.name
为什么我这样最后得到结果有一个sum值是错误的