日期:2014-05-18  浏览次数:20658 次

###求汇总sql语句###

“序号,类型,类型下属等级,年份”   几个字段
---------------
cid,   ckind,   clevel,   cyear
1               A               A1           1999
2               A               A2           1999
3               A               A3           1999
4               b               b1           1998
5               A               A1           1998
6               A               A2           1998
7               B               b1           1999
8               C               c2           1997
9               B               b3           1999
10             B               b2           1999
...

要统计每一年里   每种类型下   每个等级   的记录数量:

年份|       类a.等级A1   |     a.A2     |     a.A3     |     b.b1     |     b.b2     |     c.c1     |     c.c3   ...
--     ------         --           ---     --           ---           --         --     -
1999               X                         X                 Y               Z                 X                   X               ?
1998
1997
...

%%%%%%%%%%%%%%%%%%%%%%
在access里运行
请问如何写sql?

------解决方案--------------------

DECLARE @t TABLE(Year int,Quarter int,Quantity decimal(10,1),Price decimal(10,2))
INSERT @t SELECT 1990, 1, 1.1, 2.5
UNION ALL SELECT 1990, 1, 1.2, 3.0
UNION ALL SELECT 1990, 2, 1.2, 3.0
UNION ALL SELECT 1990, 1, 1.3, 3.5
UNION ALL SELECT 1990, 2, 1.4, 4.0
UNION ALL SELECT 1991, 1, 2.1, 4.5
UNION ALL SELECT 1991, 2, 2.1, 4.5
UNION ALL SELECT 1991, 2, 2.2, 5.0
UNION ALL SELECT 1991, 1, 2.3, 5.5
UNION ALL SELECT 1991, 1, 2.4, 6.0

--查询处理
SELECT Year,
Q1_Amount=SUM(CASE Quarter WHEN 1 THEN Quantity END),
Q1_Price=CAST(AVG(CASE Quarter WHEN 1 THEN Price END) AS DECIMAL(10,2)),
Q1_Money=CAST(SUM(CASE Quarter WHEN 1 THEN Quantity*Price END) AS DECIMAL(10,2)),
Q2_Amount=SUM(CASE Quarter WHEN 2 THEN Quantity END),
Q2_Price=CAST(AVG(CASE Quarter WHEN 2 THEN Price END) AS DECIMA