表1 (level表示级别 1为省 2为市 3为县)
id       name      level      parentid
0        河北        1
1        保定        2          0
2        石家庄      2          0
3        唐山        2          0
4         定州       3          1
5         望都       3          1
6         正定       3          2
7         新乐       3          2
8         正天       3          3
表2
id     value       areaid
1        3            1
2        5            2
3        2            3
4        1            4
5        2            5
6        0            7
7        1            8
8        2            6现在要求的查询结果是如下:
name    Fitem
保定     6
石家庄   7
唐山     3其中fitem为:为当前市(包含下面县的合计值).如何以市为单位查出上面的结果.access高手帮忙写下.万分感谢

解决方案 »

  1.   

    SQL SERVER中可以用with表达式,
    access中不知道怎么弄。
      

  2.   


    CREATE TABLE A11
    (
    id INT, name NVARCHAR(20), level INT, parentid INT
    )
    INSERT INTO A11
    SELECT
    0 ,'河北', 1,NULL
    UNION SELECT
    1 ,'保定', 2 ,0
    UNION SELECT
    2 ,'石家庄', 2 ,0
    UNION SELECT
    3 ,'唐山 ',2 ,0
    UNION SELECT
    4 ,'定州 ',3 ,1
    UNION SELECT
    5 ,'望都 ',3, 1
    UNION SELECT
    6 ,'正定', 3 ,2
    UNION SELECT
    7 ,'新乐', 3 ,2
    UNION SELECT
    8 ,'正天', 3, 3CREATE TABLE A111
    (
    id INT, value INT, areaid INT
    )
    INSERT INTO A111
    SELECT 
    1, 3, 1
    UNION SELECT 2, 5, 2
    UNION SELECT 3, 2, 3
    UNION SELECT 4, 1, 4
    UNION SELECT 5, 2, 5
    UNION SELECT 6, 0, 7
    UNION SELECT 7, 1, 8
    UNION SELECT 8, 2, 6
    SELECT CNAME,SUM(value) FROM
    (
    SELECT *,CASE WHEN LEVEL=3 THEN (SELECT ID FROM A11 WHERE ID=A.PARENTID) ELSE LEVEL END CID,
    CASE WHEN LEVEL=3 THEN (SELECT NAME FROM A11 WHERE ID=A.PARENTID) ELSE NAME END CNAME FROM A11 A
    )T
    INNER JOIN A111 B
    ON T.ID=B.areaid
    GROUP BY CNAME
      

  3.   

    case 用access里的SWITCH代替即可
      

  4.   

    SELECT *,CASE WHEN LEVEL=3 THEN (SELECT ID FROM A11 WHERE ID=A.PARENTID) ELSE LEVEL END CID,
    这种写法在access中是错误的.即使换成了access中的switch或者iif      SELECT ID FROM A11 WHERE ID=A.PARENTID这一句不对.