关于SQL语句的问题(50分)

  • 主题发起人 主题发起人 T李寻欢
  • 开始时间 开始时间
T

T李寻欢

Unregistered / Unconfirmed
GUEST, unregistred user!
select AgeName as 年龄段,count(姓名) as 人数
from
(select 姓名,AgeName=
case
when (年龄< 42 and 年龄>=30) then '30-42'
when (年龄< 30 and 年龄>= 20) then '20-30'
when (年龄>= 42) then '42以上'
end
from zcjy) as tt
group by AgeName
这条语句我总是看不懂,哪位仁兄帮助一下,能不能详细说明一下。
本人太菜。不要见笑。
可不可以介绍一下学习SQL的语法学习的网站或书。
先谢过。
 
有人肯帮忙吗???
 
sql server book online 就有详细的说明case(T-SQL)
这种语法只适用于sql server
如果更换了数据库,这句话就没用了
 
(select 姓名,AgeName=
case
when (年龄< 42 and 年龄>=30) then '30-42'
when (年龄< 30 and 年龄>= 20) then '20-30'
when (年龄>= 42) then '42以上'
end
from zcjy) as tt 相当于一个临时表
,字段为“姓名,AgeName”,其中AgeName 要根据年龄值动态生成(Case语句的功能)
 
我来晚了,还有不懂的吗?我可以再给你解释。
 
SQL语句的作用:
zcjy是个人员表,有姓名、年龄等字段。
统计'30-42','20-30','42以上'这三个年龄段的人数。(怎么没有30以下这个年龄段)。

它先根据ZCJY表的实际年龄,得到一个AgeName字段,标识人员的年龄段,得到一个结果集,
然后在从这个结果集中分组统计出各年龄段的人数。
 
(select 姓名,AgeName=
case
when (年龄< 42 and 年龄>=30) then '30-42'
when (年龄< 30 and 年龄>= 20) then '20-30'
when (年龄>= 42) then '42以上'
end
from zcjy) as tt
我还是不太明白,
1.这个agename是不是形成的虚拟新表,
2.'20=30'和'42以上'它们是不是新表的字段,能不能告诉我的结果集是什么样。
3.这个as tt 是什么意思。
 
你运行一下SQL语句不就完了,
AgeName是字段名,其取值根据年龄字段值变化。比如年龄在30-42之间,则其值为'30=42'……
as tt:是给表或数据集赋别名,
 
本人太菜。不要见笑。
可不可以介绍一下学习SQL的语法学习的网站或书。
先谢过。
 
>1.这个agename是不是形成的虚拟新表,
>2.'20=30'和'42以上'它们是不是新表的字段,能不能告诉我的结果集是什么样。
>3.这个as tt 是什么意思。

1。agename是中间结果集的一个字段名
2。'20=30'和'42以上'是字段agename的值。结果集就是一个行列表
3。as tt表示 SQL语句中FROM子句中嵌套的SELECT语句生成的结果集的别名。
select tt.AgeName as 年龄段,count(tt.姓名) as 人数
。。。

 
这是一个嵌套查询,子查询
(select 姓名,AgeName=
case
when (年龄< 42 and 年龄>=30) then '30-42'
when (年龄< 30 and 年龄>= 20) then '20-30'
when (年龄>= 42) then '42以上'
end
from zcjy) as tt
是指查询表zcjy生成一虚拟表tt
zcjy中有字段 [姓名]、[年龄]
tt中有字段 [姓名]、[AgeName]
[AgeName]的值根据zcjy的[年龄]字段生成,
生成规则如下:若(年龄< 42 and 年龄>=30) 则[AgeName]= '30-42'
若 (年龄< 30 and 年龄>= 20) 则[AgeName]= '20-30'
若 (年龄>= 42) 则[AgeName]='42以上'
1、[AgeName] 是虚拟表tt中一个字段
2、'20-30'和'42以上'它们不是新表的字段,而是字段[AgeName]的值
查询语句的结果集如下:
年龄段 人数
30-42 1
20-30 1
42以上 2
表示各年龄段的人数分布。
3、as tt 表示生成一虚拟表tt
 
本人太菜。不要见笑。
请问这个虚拟表tt,查询的时候是不是和普通的表一梓,它什么时候被删除呢??
可不可以介绍一下学习SQL的语法学习的网站或书。
先谢过。
 
请查看Sql Server Book Online ,关于别名的说明

The readability of a SELECT statement can be improved by giving a table an alias, also known as a correlation name or range variable. A table alias can be assigned either with or without the AS keyword:

table_name AS table alias


table_name table_alias
In this example, the alias p is assigned to publishers.

USE pubs
SELECT p.pub_id, p.pub_name
FROM publishers AS p

 
建议看MSSQL的SQL Server Books Online
在里面的索引中输入CASE按回车,在出现的窗口里选择CASE (T-SQL)
里面说得非常详细。
还有例子,可直接在它的SQL服务器中测试。
 
自己建一个table,试一下你就明白了。
 
>请问这个虚拟表tt,查询的时候是不是和普通的表一梓,它什么时候被删除呢??

to T沈浪:(你和楼主是一个人吧)
这是个嵌套查询,是在查询的基础上的再查询,不存在这个物理的虚拟表,(叫它
虚拟表也不正确),它只存在于内存中,查询结束后,就自动释放了。
 
你那个SQL写的太麻烦我给你改一下,你应该可以看明白吧

select
(case
when (年龄< 42 and 年龄>=30) then '30-42'
when (年龄< 30 and 年龄>= 20) then '20-30'
when (年龄>= 42) then '42以上'
end) as 年龄段,
count(姓名) as 人数
from zcjy
group by
(case
when (年龄< 42 and 年龄>=30) then '30-42'
when (年龄< 30 and 年龄>= 20) then '20-30'
when (年龄>= 42) then '42以上'
end)
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
821
import
I
后退
顶部