sqlserver with cte语句问题
时间:2011-11-28
来源:互联网
语句是这样的
with cte as(select distinct top 10 QStandType.QStandTypeID,QStandType.QStandTypeName,ROW_NUMBER() over(order by QStandID asc) as num from QStand
inner join containstable(QStand,(QStandFRContent,QStandGRContent),'混凝土 and 强度',50)as k
on QStandID=k.[key]
inner join QStandType on
QStand.QStandTypeID=QStandType.QStandTypeID
order by QStandTypeID asc
)
select * from cte where num>5
查询结果如下:
9 建筑地基处理技术规范 JGJ79—2002 20
11 锚杆喷射混凝土支护技术规范 GB50086-2001 23
11 锚杆喷射混凝土支护技术规范 GB50086-2001 24
11 锚杆喷射混凝土支护技术规范 GB50086-2001 25
11 锚杆喷射混凝土支护技术规范 GB50086-2001 26
15 大体积混凝土施工规范 GB50496-2009 40
15 大体积混凝土施工规范 GB50496-2009 41
16 装配式大板居住建筑设计与施工规程 JGJ1-91 43
17 高层建筑混凝土结构技术规程 JGJ3-2002 44
19 冷拔钢丝预应力混凝土构件设计施工规程 JGJ19-92 45
这里有两个问题
1.查询出来的结果,不是5条,应该是后5条的,个人感觉containstable前面的语句没用上
2.查询出来的结果有重复,但是我在第一句就写了 select distinct
这里主要是涉及到了分页存储过程
请各位大侠指点。。 实验成功的语句
declare @ContentOne nvarchar(50)
declare @ContentTwo nvarchar(50)
set @ContentOne='混凝土'
set @ContentTwo='强度'
declare @sql nvarchar(500)
set @sql='select distinct top 5 QStandType.QStandTypeID,QStandType.QStandTypeName from QStand
inner join
containstable(Qstand,([QStandFRContent],[QStandGRContent]),''("'+@ContentOne+'")and
("'+@ContentTwo+'")'',5000) as k
on QStandID=k.[key]
inner join QStandType on
QStand.QStandTypeID=QStandType.QStandTypeID
order by QStandTypeID'
exec sp_executesql @sql
结果如下:
3 建筑基坑支护技术规范 JGJ120-99
4 湿陷性黄土地区建筑基坑工程安全技术规程 JGJ167-2009
5 膨胀土地区建筑技术规范 GBJ112-87
6 湿陷性黄土地区建筑规范 GB50025-2004
7 建筑边坡工程技术规范 GB50330-2002
作者: linagxiaojing 发布时间: 2011-11-28
order by QStandTypeID desc呢?
作者: fredrickhu 发布时间: 2011-11-28
语句是这样的
with cte as(select distinct top 10 QStandType.QStandTypeID,QStandType.QStandTypeName,ROW_NUMBER() over(order by QStandID asc) as num from QStand
inner join containstable(QStand,(QStandFRCon……
跟这个没关系呢。。 asc 和 desc一个正反序的问题 没差别,结果只是倒了个个,没有解决根本,谢谢你的回答。。
作者: linagxiaojing 发布时间: 2011-11-28
作者: fredrickhu 发布时间: 2011-11-28
--把QStandID 放cte然后查 看看 SELECT * FROM cte WHERE num > 5 ORDER BY QStandID ASC
作者: hero__Stone 发布时间: 2011-11-28
你把存储过程print 出来看看。
SQL code
with cte as(select distinct top 10 QStandType.QStandTypeID,QStandType.QStandTypeName,ROW_NUMBER() over(order by QStandID asc) as num from QStand inner join containstable(QStand,(QStandFRContent,QStandGRContent),'混凝土 and 强度',50)as k on QStandID=k.[key] inner join QStandType on QStand.QStandTypeID=QStandType.QStandTypeID order by QStandTypeID asc ) select * from cte where num>5
作者: linagxiaojing 发布时间: 2011-11-28
SQL code
--把QStandID 放cte然后查 看看
SELECT *
FROM cte
WHERE num > 5
ORDER BY QStandID ASC
查询的结果是:
1297 9 建筑地基处理技术规范 JGJ79—2002 20
1832 11 锚杆喷射混凝土支护技术规范 GB50086-2001 23
2006 11 锚杆喷射混凝土支护技术规范 GB50086-2001 24
2029 11 锚杆喷射混凝土支护技术规范 GB50086-2001 25
2033 11 锚杆喷射混凝土支护技术规范 GB50086-2001 26
13986 15 大体积混凝土施工规范 GB50496-2009 40
14210 15 大体积混凝土施工规范 GB50496-2009 41
16635 16 装配式大板居住建筑设计与施工规程 JGJ1-91 43
16841 17 高层建筑混凝土结构技术规程 JGJ3-2002 44
17151 19 冷拔钢丝预应力混凝土构件设计施工规程 JGJ19-92 45
第二个字段相同而且显示是因为它里面的一些章节有符合查询条件的,但我不明白,我的那个成功的查询语句可以查询出来让它不显示相同的,移植到这里就不行。。
作者: linagxiaojing 发布时间: 2011-11-28
SQL code
with cte as(select distinct top 5 QStandType.QStandTypeID,QStandType.QStandTypeName,ROW_NUMBER() over(order by QStandType.QStandTypeID asc) as num from QStand inner join containstable(QStand,(QStandFRContent,QStandGRContent),'混凝土 and 强度',50)as k on QStandID=k.[key] inner join QStandType on QStand.QStandTypeID=QStandType.QStandTypeID order by QStandTypeID asc ) select * from cte where num>0
还剩第二个,把相同的变成一条。 加油。。。。
作者: linagxiaojing 发布时间: 2011-11-28
改为试试
select top 10 distinct
作者: roy_88 发布时间: 2011-11-28
select distinct top 10
改为试试
select top 10 distinct
错了。 直接报错。 看是出现哪里没有执行到。。 呵呵 麻烦你了
作者: linagxiaojing 发布时间: 2011-11-28
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28