读书人

求解啊该如何处理

发布时间: 2012-07-29 15:26:13 作者: rapoo

求解啊?
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 

读书人网 >SQL Server

热点推荐