sqlwithtemp
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