seelct 部门号,sum(当日邮资) as 当日邮资,sum(数量) as 数量,getdate() as 日期 from
(
SELECT dbo.过戳.部门卡号 AS 部门号, dbo.过戳.单件邮资 * dbo.过戳.数量 AS 当日邮资,
dbo.过戳.数量 + dbo.制签.制签数量 AS 数量
FROM dbo.过戳
WHERE (DATENAME(dayofyear, dbo.过戳.日期) = DATENAME(dayofyear, GETDATE()))
union all
SELECT dbo.制签.部门卡号 AS 部门号, dbo.制签.单件邮资 * dbo.制签.制签数量 AS 当日邮资,
dbo.制签.数量 + dbo.制签.制签数量 AS 数量
FROM dbo.制签
WHERE (DATENAME(dayofyear, dbo.制签.日期) = DATENAME(dayofyear, GETDATE()))
) as a
(
SELECT dbo.过戳.部门卡号 AS 部门号, dbo.过戳.单件邮资 * dbo.过戳.数量 AS 当日邮资,
dbo.过戳.数量 + dbo.制签.制签数量 AS 数量
FROM dbo.过戳
WHERE (DATENAME(dayofyear, dbo.过戳.日期) = DATENAME(dayofyear, GETDATE()))
union all
SELECT dbo.制签.部门卡号 AS 部门号, dbo.制签.单件邮资 * dbo.制签.制签数量 AS 当日邮资,
dbo.制签.数量 + dbo.制签.制签数量 AS 数量
FROM dbo.制签
WHERE (DATENAME(dayofyear, dbo.制签.日期) = DATENAME(dayofyear, GETDATE()))
) as a
AND dbo.制签.机号=dbo.过戳.机号 ?????????
(
SELECT dbo.过戳.部门卡号 AS 部门号, dbo.过戳.单件邮资 * dbo.过戳.数量 AS 当日邮资,
dbo.过戳.数量 + dbo.制签.制签数量 AS 数量
FROM dbo.过戳
WHERE (DATENAME(dayofyear, dbo.过戳.日期) = DATENAME(dayofyear, GETDATE()))
union all
SELECT dbo.制签.部门卡号 AS 部门号, dbo.制签.单件邮资 * dbo.制签.制签数量 AS 当日邮资,
dbo.制签.数量 + dbo.制签.制签数量 AS 数量
FROM dbo.制签
WHERE (DATENAME(dayofyear, dbo.制签.日期) = DATENAME(dayofyear, GETDATE()))
) as a
这样的统计应该用UNION吧??
连接起来好象怎么都不对。
(select depaid as 部门,dat as 日期,sum(OnePrice*Num) as 当日邮资 from #tmp group by depaid,dat) a,
(select depaid as 部门,dat as 日期,sum(OnePrice*Num) as 当日邮资 from #tmp1 group by depaid,dat) b
where a.部门=b.部门 and a.日期=b.日期
group by a.部门,a.日期
过戳表:#tmp
制签表:#tmp1
depaid:部门卡号
onePrice:单价
num:数量
dat:日期
select 部门卡号 ,日期,邮资=null into #t from 过戳
unoin
select 部门卡号 ,日期=getdate(), 邮资=null from 制签表update #t set 郵资=SUM(dbo.过戳.单件邮资 * dbo.过戳.数量)from 过戳
group by 部门卡号 ,日期
where #t.部门卡号 =过戳.部门卡号 and #t.日期=过戳.日期update #t set 郵资=SUM(dbo.过戳.单件邮资 * dbo.过戳.数量)from 过戳
group by 部门卡号
where #t.部门卡号 =过戳.部门卡号 and #t.日期=getdate()
select * from #t
当日邮资统计为2,3 而在制签表中有一个部门号为1的当日邮资统计量 4
则在 SUM(dbo.过戳.单件邮资 * dbo.过戳.数量)
+ SUM(dbo.制签.单件邮资 * dbo.制签.制签数量) AS 当日邮资,
这句语句中,得到的值为2+3+4+4=13,制签中的邮资量被加了两遍。产生了
错误
另一个问题就是假如在制签表有一个部门号为2的当日邮资量时,而过戳表中
却只有部门号为1的邮资量,在dbo.过戳.部门卡号 = dbo.制签.部门卡号
这个条件中就无法得到部门号为2的纪录了,
请问各位高手该如何解决!!!
当日邮资统计为2,3 而在制签表中有一个部门号为1的当日邮资统计量 4
则在 SUM(dbo.过戳.单件邮资 * dbo.过戳.数量)
+ SUM(dbo.制签.单件邮资 * dbo.制签.制签数量) AS 当日邮资,
这句语句中,得到的值为2+3+4+4=13,制签中的邮资量被加了两遍。产生了
错误
另一个问题就是假如在制签表有一个部门号为2的当日邮资量时,而过戳表中
却只有部门号为1的邮资量,在dbo.过戳.部门卡号 = dbo.制签.部门卡号
这个条件中就无法得到部门号为2的纪录了,
请问各位高手该如何解决!!!
(
SELECT dbo.过戳.部门卡号 AS 部门号, dbo.过戳.单件邮资 * dbo.过戳.数量 AS 当日邮资,
dbo.过戳.数量 AS 数量
FROM dbo.过戳
WHERE (DATENAME(dayofyear, dbo.过戳.日期) = DATENAME(dayofyear, GETDATE()))
union all
SELECT dbo.制签.部门卡号 AS 部门号, dbo.制签.单件邮资 * dbo.制签.制签数量 AS 当日邮资,
dbo.制签.制签数量 AS 数量
FROM dbo.制签
WHERE (DATENAME(dayofyear, dbo.制签.日期) = DATENAME(dayofyear, GETDATE()))
) as a
SELECT dbo.过戳.部门卡号 AS 部门号, dbo.过戳.单件邮资 * dbo.过戳.数量 AS 当日邮资,
dbo.过戳.数量 AS 数量
FROM dbo.过戳
WHERE (DATENAME(dayofyear, dbo.过戳.日期) = DATENAME(dayofyear, GETDATE()))
union all
SELECT dbo.制签.部门卡号 AS 部门号, dbo.制签.单件邮资 * dbo.制签.制签数量 AS 当日邮资,
dbo.制签.制签数量 AS 数量
FROM dbo.制签
WHERE (DATENAME(dayofyear, dbo.制签.日期) = DATENAME(dayofyear, GETDATE()))
WHERE (DATENAME(month, dbo.过戳.日期) = DATENAME(month, GETDATE()))
UNION ALL
SELECT dbo.制签.部门卡号 AS 部门号, dbo.制签.单件邮资 * dbo.制签.制签数量 AS 当日邮资, dbo.制签.制签数量 AS 数量 FROM dbo.制签
WHERE (DATENAME(month, dbo.制签.日期) = DATENAME(month, GETDATE()))这个视图在保存时产生如下错误:视图定义中没有输入列或FROM子句中没有项目。请问这是什么原因
如你前面的語句,即使可以建立視圖,累計時也要再用sum...group來統計。
不知你的前端工具是什麼(vb,asp還是其它)。
建議你使用存儲過程來返回數據集。
上面的語句有一點問題,如果你的过戳表中有多年的數據,結果就不對了。
應該是datediff(day,日期,getdate())=0