“序号,类型,类型下属等级,年份” 几个字段
---------------
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?

解决方案 »

  1.   


    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 DECIMAL(10,2)),
    Q2_Money=CAST(SUM(CASE Quarter WHEN 2 THEN Quantity*Price END) AS DECIMAL(10,2))
    FROM @t
    GROUP BY Year
    /*--结果
    Year  Q1_Amount  Q1_Price   Q1_Money  Q2_Amount  Q2_Price  Q2_Money
    ------- ----------------- --------------- ----------------- ----------------- -------------- ----------------
    1990  3.6         3.00       10.90       2.6          3.50      9.20
    1991  6.8         5.33       36.50       4.3          4.75      20.45
    --*/
      

  2.   

    Access数据库中没有case when ,可以使用iif(isnull())处理。