当前位置:首页 » 编程语言 » sqlwithtemp

sqlwithtemp

发布时间: 2022-04-24 05:22:13

1. sql如何用with as的结果作where条件

示例代码如下:

;with a as(select * from table_a),
b as (select * from a where id in(3,4,5))
select * from b

记得一定要有逗号间隔开两个查询,最后一个查询前是没有逗号的

2. 求救啊。下面存储过程怎么改,with temp as ()这里有错误

set @sql2='with temp as (select row_number() over (order by id) as inde, * from T_Books where '+@Field+' like ''% '+@Key+' %'' ) select * from temp where inde between (@pageIndex - 1)* @pageSize+1 and @pageIndex * '
将sql2 修改成这样

3. SQL 查询语句求助

--按学生分组统计选课数,按学生成绩降序排名,然后过滤MSSQL2005+
Select学生,课程号,成绩From
(
select*,COUNT(*)over(partitionby学生)ascnt,DENSE_RANK()over(partitionby学生orderby成绩desc)
as名次from表
)swherecnt>=2and名次>1

--好像就这样就可以了

Select学生,课程号,成绩From
(
select*,DENSE_RANK()over(partitionby学生orderby成绩desc)
as名次from表
)swhere名次>1

4. 问一下关于SQL语句的问题,with什么意思,别的都是什么意思,谢谢!!

with as 得到的数据是一次性使用的临时数据。其中with 不是单独一个意思,跟as组合起来后成为一个短语。

举个例子:
with [abc] as(……)
select …… from [abc] where 条件A
select …… from [abc] where 条件B
以上语句在执行时,条件A的语句能取到数;取完数后 临时数据[abc]就清除了;所以到条件B的语句就执行不下去了。

5. sql语句求解

select * from (
select * from table where to_date(year || month || day)<to_date(‘2012’ || ‘05’ || ‘05’) order by to_date(year || month || day) desc)
where rownum = 1
最简单的就是先排序,然后取得第一条,效率也就是这么样了。
如果年月日都是数字的话,也可以用year*10000+month*100+day来比较,因为日期的大小和当成数字比较的结果是一样的。

6. SQL数据去重后连接另外一表


createtable[表A]
([编号]varchar(10),
[姓名]varchar(20)
)


createtable[表B]
([编号]varchar(10),
[销售]int
)
go


insertinto[表A]
values('001','A'),
('002','B'),
('002','B'),
('003','C')
go

insertinto[表B]
values('001',1000),
('002',750),
('003',11200)
go


print'方式一:------------'


selectt1.[编号],t1.[姓名],t2.[销售]from
(selectdistinct[编号],[姓名]from[表A])ast1leftjoin
[表B]ast2ont1.[编号]=t2.[编号]

go
print'方式二:------------'

selectt1.[编号],t1.[姓名],t2.[销售]from
(selectdistinct[编号],[姓名]from[表A])ast1,[表B]ast2wheret1.[编号]=t2.[编号]print'-------------'


truncatetable[表A]
droptable[表A]


truncatetable[表B]
droptable[表B]

go

希望能帮到你!

7. 一个棘手的SQL条件限制

createtableT
(
IDint,
AIDint,
BIDint
)

--Aid=1,BID=1,2在查询结果中
insertintoTvalues(1,1,1)
insertintoTvalues(2,1,2)
insertintoTvalues(3,1,3)
insertintoTvalues(4,1,4)

--Aid=2只有一条,不管Bid多少都在查询结果中
insertintoTvalues(5,2,7)

--Aid=3,只有Bid=2在查询结果中
insertintoTvalues(6,3,2)
insertintoTvalues(7,3,3)
insertintoTvalues(8,3,4)

--Aid=4,Bid=1在查询结果中
insertintoTvalues(9,4,1)
insertintoTvalues(10,4,1)

SelectID,AID,BidFrom
(
Select*,COUNT(*)Over(PARTITIONbyAid)AsY
FromT
)sWhere(BIDin(1,2))orY=1

8. sql存储过程用递归

表结构:
sale_area销售分区表
PK#area_id
class_id
gonghao

prod_class产品分类表
PK#class_id
class_name

问题sql语句:
select distinct pa.class_id from prod_class As pa,prod_class As pb,sale_area where pb.class_id in(select sale_area.class_id from sale_area where sale_area.gonghao=<param>) and pa.class_id like pb.class_id||'%'

问题定义:
根据传入的参数gonghao来确定对应的class_id集,然后遍历这个class_id集,并“扩充”这个集合
要理解“扩充”必须知道class_id是这样设等级:
0为最高级
|_01
| |_011
| |_012
|_02
|_011
|_012
那么拥有等级0的话,所有的等级都应该可以访问,拥有等级01的话,011、012也可以访问。
这句sql的目的就是得到当前员工能访问的所有产品分类及它的子集。

通过自连接的做法在Oracle里是对的,在DB2里就错,原因在于DB2中谓词like两边至少有一个是字符串,也就是说DB2不认为pb.class_id||'%'是字符串。

求解:
要完成上面的任务有什么可替代的办法或改进的地方,注意环境是DB2 UDB 7.2。
---------------------------------------------------------------

就是树的问题。
使用公共表达式可以完成。
你在信息中心里面按recusion去搜索,可以找到递归sql的写法。
---------------------------------------------------------------

问题写的很清楚,我喜欢!
如果要使用DB2的公共表达式建议你把
prod_class产品分类表结构改一下
PK#class_id
class_name
Parent_Class_id

sql语句如下:

with temp_class_id( class_id,class_name)
(
select pc.class_id,pc.class_name from prod_class pc
where pc.class_id in (select sale_area.class_id from sale_area
where sale_area.gonghao=<param>)
union
select pc.class_id,pc.class_name from prod_class pc,
temp_class_id tc
where pc.parent_id = tc.class_id)
select * from temp_class_id;

9. 如何用sql语句 把俩个字段值加到一块

SQL 2005 以上版本可用:

WITH temp AS
(
SELECT [login],
CASE WHEN LEFT([agent], 6) = 'Agent/' THEN SUBSTRING([agent], 7, LEN([agent]) - 6) ELSE [agent] END AS [agent]
FROM [table1]
)
SELECT SUM([login]), [agent]
FROM [temp]
GROUP BY [agent]

10. SQL数据库中临时表,临时变量和with as关键词创建“临时表”的区别

SQL数据库中数据处理时,有时候需要建立临时表,将查询后的结果集放到临时表中,然后在针对这个数据进行操作。
创建“临时表”(逻辑上的临时表,可能不一定是数据库的)的方法有一下几种:
1.with tempTableName as方法(05之后出现):
with temptable as 其实并没有建立临时表,只是子查询部分(subquery factoring),定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。
http://www.cnblogs.com/zhaowei303/articles/4204805.html

热点内容
我配置很高了ae为什么卡 发布:2025-05-17 14:54:50 浏览:167
python数据分析实战pdf 发布:2025-05-17 14:49:42 浏览:950
海澜之家广告脚本 发布:2025-05-17 13:56:06 浏览:30
手文件夹恢复 发布:2025-05-17 13:53:32 浏览:993
linux怎么看进程 发布:2025-05-17 13:53:30 浏览:303
thinkphp字段缓存 发布:2025-05-17 13:52:01 浏览:575
山灵app安卓版如何设置 发布:2025-05-17 13:51:49 浏览:388
帆布压缩袋 发布:2025-05-17 13:26:27 浏览:460
c语言16进制表示方法 发布:2025-05-17 13:11:25 浏览:482
ftp单位 发布:2025-05-17 13:10:03 浏览:144