当前位置: 代码迷 >> Sql Server >> 求解啊该如何处理
  详细解决方案

求解啊该如何处理

热度:5   发布时间:2016-04-27 12:10:33.0
求解啊?
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' 无效。


怎么办?为什么?

------解决方案--------------------
SQL code
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 d2FROM [ta]GROUP BY [name]having AVG(a)<=6UNION ALLSELECT '统计',  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 d2FROM  (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 d2FROM [ta]GROUP BY [name]having AVG(a)<=6)ta
------解决方案--------------------
SQL code
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 d2FROM [ta]GROUP BY [name]having AVG(a)<=6UNION ALLSELECT '统计',  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 d2FROM  (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 d2FROM [ta]GROUP BY [name]having AVG(a)<=6)t
------解决方案--------------------
姐姐搞错了,修改的不是你的原版的,不过也是一样的

SUM(d1) AS d1,
SUM(d2) AS d2 就可以了

SQL code
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 d2FROM [ta]GROUP BY [name]having AVG(a)<=6UNION ALLSELECT '统计',  AVG(a) as a,  AVG(b) as b,  AVG(c) as c,SUM(d1) AS d1,SUM(d2) AS d2FROM  (    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
  相关解决方案