sql问题求解,高手进! 敢于sql变量问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql问题求解,高手进! 敢于sql变量问题相关的知识,希望对你有一定的参考价值。

我想要查询一个列的数据,但是那个列的列名我是用变量来代替的。但我发现用变量来答题列名和表名都有问题,那就是sqlserver不知道那是列名,把他当成常量了,比如
declare @n varchar(10)
set @n = column
select @n from table 那么选出来的不是table里面的column列,而是column这样的字符。
表也类似,比如
declare @n varchar(10)
set @n = table
select * from @n
会说类名无效
有没有办法解决???求解

用动态SQL
@sql = ‘select * from ’+ @n
exec(@sql) 或sp_executesql(@sql)追问

declare @n varchar(100)
set @n = 'cjb'
select * from cjb
declare @sql varchar(1000)
set @sql = 'select * from ' + @n
我没用exec(@sql)怎么也行?

追答

你写了这句select * from cjb

参考技术A 只能拼接sql,直接写的sql语句要求列名及表名要确定不可变
declare @sql nvarchar(max)
set @sql='select '+@column+' from '+@table
exec(@sql)

SQL里面group by 语句和WHERE的区别,高手进

我们老师写了一道题,统计平均分在75分以上的课程号和平均分
老师这样写的select C#,AVG(SCORE)
FROM student
group by c# having avg(score)>=75
老师讲GROUP BY是分组用的,题目中没写有“每”这个字,也就没说要分组啊,为什么老师用分组我很费解?为什么最后那句不用where avg(score)>=75呢?谁能告诉怎么看题目就能知道哪个用GROUP哪个用WHERE?谢谢,快考试了,高手快来帮忙啊!
我想知道为什么不用WHERE而用GROUP BY,怎么才能从题目中分辨出来这个就写GROUP BY那个就写WHERE?

你老师的写法是一个嵌套查询语句。
==================================
我晕……楼上哪里看出嵌套了……
好吧,楼主主要是两个问题,
一个是什么情况该用Group by,
还有一个是having 和where有什么区别。
那个题目可以这样读的吧:
统计“每”一门课程,显示平均分在75分以上的课程号和平均分。
如果不按每门课程统计,就变成对所有课程的分数求平均值了。显然和需求不符。
Group By 是集计分支,只要有统计数据的地方,就极可能用到Group by。
常用的集计函数有这几种:Count, Avg, Max, Min, Sum也就是说,如果要求某一数据的数量、平均值、最大值、最小值、总计,常常都是要和Group By连用的。
所以看见这种题目,就用Group by吧。
二,HAVING和WHERE的区别在于,HAVING是统计完以后进行过滤,而WHERE是在统计前进行过滤。
你的这个题目里,avg(score)是统计以后才得出的数据,所以只能用HAVING。
参考技术A 1.对where理解基本正确
2.having
子句对
group
by
子句设置条件的方式与
where
子句和
select
语句交互的方式类似。where
子句搜索条件在进行分组操作之前应用;而
having
搜索条件在进行分组操作之后应用。having
语法与
where
语法类似,但
having
可以包含聚合函数。having
子句可以引用选择列表中出现的任意项。
以上一段是我拷过来的,实际就是说,having
的效果,和where是差不多的。差别在于分组前可以where
但是group
by
分组后,显然不能再次where,所以要用having。
参考技术B 对于这段sql语句,我的理解是:
C#其实是课程号,那么GROUP BY进行分组的是课程号,而对于HAVING子句是对 GROUP BY 子句设置条件的方式,那么having avg(score)>=75也就是对于每个课程号选取其平均分大于75分的记录。。。
参考技术C Group By的名词解释是分组,但是并不是你理解的分组,如果不加Group By,这个查询会出错。

你老师的写法是一个嵌套查询语句。

以上是关于sql问题求解,高手进! 敢于sql变量问题的主要内容,如果未能解决你的问题,请参考以下文章

安装过SQL Server 2008失败,求解。

求救!!SQL高手进!!!

高手进!如何把Sql里面的datediff()方法,在Oracle里面如何替换使用啊?

我的SQL数据库是2008版本,如何附加SQL2005创建的数据库?(只有数据库文件,没有脚本)急求高手!!

access数据库Replace函数未定义问题,求高手回答!!

C# 关于DataGridView 添加数据 不用数据库的 出现了一些问题,求高手教教我