+ -
当前位置:首页 → 问答吧 → 求SQL中的统计语句。

求SQL中的统计语句。

时间:2011-08-24

来源:互联网

有如下数据表,想统计某段日期内大、中、小规格的产量及产品的总产量。请问各位大侠如何写代码?先谢谢了。
日期 品名 规格 数量
2011-8-01 A 大 50
2011-8-02 A 中 80
2011-8-02 B 大 60
2011-8-02 C 小 40
... ... ... ...
2011-8-03 A 小 30
2011-8-03 B 中 70
2011-8-03 C 中 90
2011-8-20 A 小 10
2011-8-20 C 大 80

作者: sxtgwj   发布时间: 2011-08-24

SQL code

--建表
CREATE TABLE Ttable([Ddate] datetime,[Cname] varchar(10),[CSize] varchar(20),Quantit numeric(10,2))

--写入测试数据到表
INSERT Ttable SELECT '2011-8-01', 'A' ,'', 50
UNION ALL SELECT '2011-8-02', 'A', '', 80
UNION ALL SELECT '2011-8-02', 'B', '', 60
UNION ALL SELECT '2011-8-02' ,'C', '', 40
UNION ALL SELECT '2011-8-03' ,'A', '', 30
UNION ALL SELECT '2011-8-03' ,'B', '', 70
UNION ALL SELECT '2011-8-03', 'C', '', 90
UNION ALL SELECT '2011-8-20', 'A', '', 10
UNION ALL SELECT '2011-8-20', 'C', '', 80

--统计
select Cname as 品名,sum(q1) as 大,sum(q2) 中,sum(q3) as 小,sum(q1) +sum(q2) +sum(q3) as 合计
from (
SELECT Cname,
    Q1=SUM(CASE CSize WHEN '' THEN Quantit else 0 END),
    q2=SUM(CASE CSize WHEN '' THEN Quantit else 0 END),
    q3=SUM(CASE CSize WHEN '' THEN Quantit else 0 END)
FROM Ttable where Ddate>='2011-8-01' and Ddate<='2011-8-20'
GROUP BY Cname) a GROUP BY Cname

---结果:
---------------------------------------
品名     大      中      小      合计
----------------------------------------
A    50.00    80.00    40.00    170.00
B    60.00    70.00    .00    130.00
C    80.00    90.00    40.00    210.00


作者: GDTOPONE   发布时间: 2011-08-24

SQL code
SELECT 品名,
    SUM(CASE 规格 WHEN '' THEN Quantit else 0 END) 大,
    SUM(CASE 规格 WHEN '' THEN Quantit else 0 END) 中,
    SUM(CASE 规格 WHEN '' THEN Quantit else 0 END) 小,
    SUM(Quantit) 总产量
FROM 表A where 日期 between '2011-8-01' and '2011-8-20'
GROUP BY 品名

作者: kaikai_kk   发布时间: 2011-08-24

热门下载

更多