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

解决方案 »

  1.   

    (1) 再加上一個LEFT JOIN 的條件怎麼樣? 
    AND dbo.制签.机号=dbo.过戳.机号  ?????????
      

  2.   

    有点错误:select 部门号,sum(当日邮资) as 当日邮资,sum(数量) as 数量,convert(char(10),getdate(),120) 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
      

  3.   

    飘香兄:
    这样的统计应该用UNION吧??
    连接起来好象怎么都不对。
      

  4.   

    select a.部门,a.日期,sum(a.当日邮资+b.当日邮资) as 当日邮资 from 
    (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:日期
      

  5.   

    用臨時表:
    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
      

  6.   

    我想我还有两个问题没说清楚,一个就是假设过戳表中有两个部门号为1的
    当日邮资统计为2,3 而在制签表中有一个部门号为1的当日邮资统计量 4
    则在  SUM(dbo.过戳.单件邮资 * dbo.过戳.数量) 
        + SUM(dbo.制签.单件邮资 * dbo.制签.制签数量) AS 当日邮资, 
    这句语句中,得到的值为2+3+4+4=13,制签中的邮资量被加了两遍。产生了
    错误
    另一个问题就是假如在制签表有一个部门号为2的当日邮资量时,而过戳表中
    却只有部门号为1的邮资量,在dbo.过戳.部门卡号 = dbo.制签.部门卡号
    这个条件中就无法得到部门号为2的纪录了,
    请问各位高手该如何解决!!!
      

  7.   

    我想我还有两个问题没说清楚,一个就是假设过戳表中有两个部门号为1的
    当日邮资统计为2,3 而在制签表中有一个部门号为1的当日邮资统计量 4
    则在  SUM(dbo.过戳.单件邮资 * dbo.过戳.数量) 
        + SUM(dbo.制签.单件邮资 * dbo.制签.制签数量) AS 当日邮资, 
    这句语句中,得到的值为2+3+4+4=13,制签中的邮资量被加了两遍。产生了
    错误
    另一个问题就是假如在制签表有一个部门号为2的当日邮资量时,而过戳表中
    却只有部门号为1的邮资量,在dbo.过戳.部门卡号 = dbo.制签.部门卡号
    这个条件中就无法得到部门号为2的纪录了,
    请问各位高手该如何解决!!!
      

  8.   

    写的语句还是会出错,你要试了一定知道怎么改的:select 部门号,sum(当日邮资) as 当日邮资,sum(数量) as 数量,convert(char(10),getdate(),120) as 日期 from
    (
    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
      

  9.   

    非常感谢Yang_(扬帆破浪)  ,jameszht(湖泊) , wylyf(李寻欢)等高手对我这个新手的帮忙这里还想请问一下,我原本想在视图中实现这个查询,那和在查询语句中有何区别。
      

  10.   

    建议,用以下语句建立视图,在视图上统计:
    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()))
      

  11.   

    非常不好意思,我比较笨,还有一个问题,是不是那就是说先用以上语句简历一个视图,然后再在这个视图上查询,那是不是还要再建一个视图我还有一个请求 Yang_(扬帆破浪),你能把qq好给我吗。
      

  12.   

    你查一下SQL的HELP及Sample,关于UNION ALL的解释
      

  13.   

    我用以上方法先建一个视图,就是如下语句,我一共要通过视图实现四个查询,分别是当日,当月,当年,累计四个查询SELECT dbo.过戳.部门卡号 AS 部门号, dbo.过戳.单件邮资 * dbo.过戳.数量 AS 当日邮资, dbo.过戳.数量 AS 数量 FROM dbo.过戳
    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子句中没有项目。请问这是什么原因
      

  14.   

    我試了一下,在sql2000中的視圖好象不支持unoin.
    如你前面的語句,即使可以建立視圖,累計時也要再用sum...group來統計。
    不知你的前端工具是什麼(vb,asp還是其它)。
    建議你使用存儲過程來返回數據集。
    上面的語句有一點問題,如果你的过戳表中有多年的數據,結果就不對了。
    應該是datediff(day,日期,getdate())=0
      

  15.   

    我刚才用sql查询分析器进行了视图的建立,这回却行了。非常感谢各位的帮忙,如果各位高手还有对这个问题有更好的想法,不妨告诉我。谢谢