Office中国论坛/Access中国论坛

标题: 报表:请教 [打印本页]

作者: zhuyiwen    时间: 2002-6-26 03:32
标题: 报表:请教
在SQL SERVER上有一交易表如下:

交易表
交易编号,交易类型,交易日期,交易描述,交易金额

其中:交易编号为主键。

求交易统计报表,结构如下:

     XXXX年XX月交易统计报表
┌────┬────┬────┐
│交易类型│交易起数│交易金额│
├────┼────┼────┤
├────┼────┼────┤
├────┼────┼────┤
├────┼────┼────┤
..............................
├────┼────┼────┤
│合  计│    │    │
├────┼────┼────┤
│本年累计│    │    │
└────┴────┴────┘
[em26]
作者: zhuyiwen    时间: 2002-6-26 19:15
不行,还有本月合计,标题是月报表
作者: HG    时间: 2002-6-26 20:03
老朱可不可以這樣
改語句  having datepart(yare,交易日期)= datepart(yare,getdate())
為 having ((datepart(yare,交易日期)=datepart(yare,getdate())) and (datepart(month,交易日期) = datepart(month,getdate()))

作者: zhuyiwen    时间: 2002-6-26 20:06
还是自己来

SELECT 交易类型, COUNT(交易编号) AS 交易起数, SUM(交易金额) AS 交易金额
FROM 交易表
WHERE (DATEPART(year, 交易日期) = DATEPART(year, GETDATE())) AND
      (DATEPART(month, 交易日期) = DATEPART(month, GETDATE()))
GROUP BY 交易类型
UNION
SELECT '合计' AS 交易类型, COUNT(交易编号) AS 交易起数, SUM(交易金额) AS 交易金额
FROM 交易表
WHERE (DATEPART(year, 交易日期) = DATEPART(year, GETDATE())) AND
      (DATEPART(month, 交易日期) = DATEPART(month, GETDATE()))
UNION
SELECT '本年累计' AS 交易类型, COUNT(交易编号) AS 交易起数, SUM(交易金额) AS 交易金额
FROM 交易表
WHERE (DATEPART(year, 交易日期) = DATEPART(year, GETDATE()))
[em26]
作者: HG    时间: 2002-6-26 20:10
老朱你這樣其寮是小題大作了,用不著用union語句的。
報表有此功能,不用白不用。
作者: zhuyiwen    时间: 2002-6-26 20:19
HG, 你好,

能用 SQL 解决要尽量用 SQL 来做,这样可避免客户端的编程复杂度。[em26]
作者: HG    时间: 2002-6-26 21:17
明白您的意思,像您上述解決情況,可以改寫成存儲過程,傳遞一個月參數,
來動態產生月報表。是嗎?
英雄所見略同,哈哈...
作者: HG    时间: 2002-6-26 21:18
标题: 更正部分
select 交易類型,count(交易編號) as 交易起數,sum(交易金額) as  交易金額
   from 交易表 ,  
     group by 交易類型 ,datepart(month,交易日期)
/*注解:此為按鬮易類型,和交易日期的月份分組

        having datepart(yare,交易日期)= datepart(yare,getdate())
這樣可不可以呀!
先按交易類型來分組統計和匯總,然后用datepart()來計算和過瀘出本年的統計
接著把報表的數據源設計為以上SQL語句,再報表上再用sum()來累加



[此贴子已经被HG于2002-6-26 12:08:20编辑过]




[此贴子已经被HG于2002-6-26 13:18:04编辑过]


作者: HG    时间: 2002-7-13 23:36
标题: 老朱是不是比您的報表,功能更上一層樓。
聯合查詢在上例中的新高效用法:
alter  procedure usp_wage_month_total(@my_year as smallint,@my_month as smallint,@my_option as bit) as   
  if @my_option = 0  
       select * from uv_wage_month_total where  wage_date_year=@my_year and wage_date_month = @my_month  
       union            
       select * from uv_wage_month_total_history where wage_date_year= @my_year and wage_date_month = @my_month  

   else   

            select * from uv_wage_month_total where wage_date_year= @my_year and wage_date_month = @my_month  and wage_pay = @my_option  
            union            
            select * from uv_wage_month_total_history where  wage_date_year=@my_year and wage_date_month = @my_month  and wage_pay = @my_option  
---------------------------------------------------------------------------------
把上面存儲過程作為數據源,就可以體現C/S構架的一些強大功能了。


[此贴子已经被HG于2002-7-13 15:35:57编辑过]


作者: zhuyiwen    时间: 2002-7-14 01:02
很好




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3