SELECT  name, 
AVG(a) as a, 
AVG(b) as b, 
AVG(c) as c,
SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d1,
SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d2
FROM [ta]
GROUP BY [name]
having AVG(a)<=6
UNION ALL
SELECT  '统计', 
AVG(a) as a, 
AVG(b) as b, 
AVG(c) as c,
SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d1,
SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d2
FROM 
(SELECT  [name], 
AVG(a) as a, 
AVG(b) as b, 
AVG(c) as c,
SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d1,
SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d2
FROM [ta]
GROUP BY [name]
having AVG(a)<=6)
ta
消息 207,级别 16,状态 1,第 17 行
列名 'd' 无效。
消息 207,级别 16,状态 1,第 17 行
列名 'd' 无效。
消息 207,级别 16,状态 1,第 18 行
列名 'd' 无效。
消息 207,级别 16,状态 1,第 18 行
列名 'd' 无效。
怎么办?为什么?

解决方案 »

  1.   

    SELECT name,  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d1<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d1,
    SUM(CASE WHEN d2>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d2
    FROM [ta]
    GROUP BY [name]
    having AVG(a)<=6
    UNION ALL
    SELECT '统计',  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d1<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d1,
    SUM(CASE WHEN d2>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d2
    FROM  
    (SELECT [name],  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d1<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d1,
    SUM(CASE WHEN d2>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d2
    FROM [ta]
    GROUP BY [name]
    having AVG(a)<=6)
    ta 
      

  2.   

    不行,还是无效
    消息 207,级别 16,状态 1,第 5 行
    列名 'd1' 无效。
    消息 207,级别 16,状态 1,第 6 行
    列名 'd2' 无效。
    消息 207,级别 16,状态 1,第 23 行
    列名 'd1' 无效。
    消息 207,级别 16,状态 1,第 24 行
    列名 'd2' 无效。
    消息 207,级别 16,状态 1,第 16 行
    列名 'd' 无效。
    消息 207,级别 16,状态 1,第 17 行
    列名 'd' 无效。
      

  3.   

    SELECT name,  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d1,
    SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d2
    FROM [ta]
    GROUP BY [name]
    having AVG(a)<=6
    UNION ALL
    SELECT '统计',  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d1,
    SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d2
    FROM  
    (SELECT [name],  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d1,
    SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d2
    FROM [ta]
    GROUP BY [name]
    having AVG(a)<=6)t
      

  4.   

    3楼的也不行啊
    消息 207,级别 16,状态 1,第 17 行
    列名 'd' 无效。
    消息 207,级别 16,状态 1,第 18 行
    列名 'd' 无效。而且count里面怎么是1了
      

  5.   

    SELECT name,  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d1,
    SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d2
    FROM [ta]
    GROUP BY [name]
    having AVG(a)<=6
    UNION ALL
    SELECT '统计',  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(d1) AS d1,
    SUM(d2) AS d2
    FROM  
    (SELECT [name],  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d1,
    SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(1) AS d2
    FROM [ta]
    GROUP BY [name]
    having AVG(a)<=6)t
    这样就可以了
      

  6.   

    姐姐搞错了,修改的不是你的原版的,不过也是一样的SUM(d1) AS d1,
    SUM(d2) AS d2 就可以了SELECT name,  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d1,
    SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d2
    FROM [ta]
    GROUP BY [name]
    having AVG(a)<=6
    UNION ALL
    SELECT '统计',  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(d1) AS d1,
    SUM(d2) AS d2
    FROM  
    (
    SELECT [name],  
    AVG(a) as a,  
    AVG(b) as b,  
    AVG(c) as c,
    SUM(CASE WHEN d<5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d1,
    SUM(CASE WHEN d>=5 THEN 1 ELSE 0 END) * 100.0 / COUNT(d) AS d2
    FROM [ta]
    GROUP BY [name]
    having AVG(a)<=6
    ) ta