sqlserver with cte语句问题 50linagxiaojing]

发布时间:2017-2-26 18:03:06 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"sqlserver with cte语句问题 50linagxiaojing]",主要涉及到sqlserver with cte语句问题 50linagxiaojing]方面的内容,对于sqlserver with cte语句问题 50linagxiaojing]感兴趣的同学可以参考一下。

    语句是这样的 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]),''("[email protected]+'")and     ("[email protected]+'")'',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

order by QStandTypeID desc呢?

引用楼主 linagxiaojing 的回复:  语句是这样的 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一个正反序的问题 没差别,结果只是倒了个个,没有解决根本,谢谢你的回答。。

你把存储过程print 出来看看。

--把QStandID 放cte然后查 看看 SELECT  *     FROM    cte     WHERE   num > 5     ORDER BY QStandID ASC

引用 3 楼 fredrickhu 的回复:你把存储过程print 出来看看。 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

引用 4 楼 hero__stone 的回复: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  第二个字段相同而且显示是因为它里面的一些章节有符合查询条件的,但我不明白,我的那个成功的查询语句可以查询出来让它不显示相同的,移植到这里就不行。。 

第一个问题解决了 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   还剩第二个,把相同的变成一条。  加油。。。。

select distinct top 10  改为试试 select top 10 distinct

引用 8 楼 roy_88 的回复:select distinct top 10  改为试试 select top 10 distinct   错了。  直接报错。  看是出现哪里没有执行到。。 呵呵 麻烦你了

with cte as(select  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 ) select top 5 * from (select distinct * from cte )t order by QStandTypeID asc 这样试试

引用 10 楼 roy_88 的回复:SQL code with cte as(select  QStandType.QStandTypeID,QStandType.QStandTypeName,ROW_NUMBER() over(order by QStandType.QStandTypeID asc) as num from QStand inner join containstable(QStand,(QStandFRCon……   这样不行呢。。  还是出现一样的结果。 

--,ROW_NUMBER() over(order by QStandType.QStandTypeID asc) as num 这段注释掉 with cte as(select  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 ) select top 5 * from (select distinct * from cte )t order by QStandTypeID asc

引用 12 楼 roy_88 的回复:--,ROW_NUMBER() over(order by QStandType.QStandTypeID asc) as num 这段注释掉 SQL code with cte as(select  QStandType.QStandTypeID,QStandType.QStandTypeName --,ROW_NUMBER() over(order by QStandType.QSt……   昨晚11点走的。 汗, 晚3分钟就好了。 你这个结果是显示正确的。 但是不好分页了呢。  我的那个是可以做分页的。。

分页到程序里做比较好

with cte as(select distinct QStandType.QStandTypeID,QStandType.QStandTypeName  from QStand inner join containstable(QStand,(QStandFRContent,QStandGRContent),'混凝土 and 强度',50)as k on QStandID=k.[key] inner join QStandType on QStand.QStandTypeID=QStandType.QStandTypeID ) select *,row=ROW_NUMBER() over(order by QStandType.QStandTypeID asc) as num from cte  --在这句做分页查询

引用 14 楼 szstephenzhou 的回复:分页到程序里做比较好   此言差异。一般数据库相对而言空闲一点,所以有些东西还是数据库来做。类似这样的语句我做过一个存储过程,可以贴出来,以供参考      ALTER Procedure [dbo].[Popular_PageList] @ContentOne   nvarchar(20),   --查询关键字 @ContentTwo   nvarchar(20), @ContentThree  nvarchar(20), @CurrentCount   int,   ----当前的索引,假设每页5条数据,第二页的话,currencount为10 @num int,   --每页的条数 @TempTypeID  int,          --所属分类 @TempTypeIDName  nvarchar(50),  --所属分类名 与上对应  两个是一起的 @fieldOne nvarchar(20),   --要查询的字段  强规 @fieldTwo nvarchar(20),        --一般规 @TempIDName nvarchar(20), --要排序的ID @Table nvarchar(20)  --要查询的表 AS declare @Sql   nvarchar(300) declare @opreat nvarchar(20) if @ContentTwo is null or @ContentTwo='' set @opreat='or' else set @opreat='and' set @Sql='with cte as(select top '+CONVERT(nvarchar,@CurrentCount)+' *,row_number() over(order by  [email protected]+' asc) as num from [email protected]+'  inner join containstable([email protected]+',([[email protected]+'],[[email protected]+']),''("[email protected]+'") [email protected]+' ("[email protected]+'")or("[email protected]+'")'',50) as k  on [email protected]+'=k.[key]  where [email protected]+'='+CONVERT(nvarchar,@TempTypeID)+'  order by [email protected]+' asc) select * from cte where num>'+CONVERT(nvarchar,@num)+'' exec sp_executeSQL  @sql   

引用 15 楼 pengxuan 的回复:SQL code with cte as(select distinct QStandType.QStandTypeID,QStandType.QStandTypeName  from QStand inner join containstable(QStand,(QStandFRContent,QStandGRContent),'混凝土 and 强度',50)as k on QSta……   我也知道是在这条里面做呢。。 你的语句错误。 as附近有语法错误。 我自己改了一下但是也提示错误      with cte as(select QStandType.QStandTypeID,QStandType.QStandTypeName from QStand inner join containstable(QStand,(QStandFRContent,QStandGRContent),'混凝土 and 强度',500)as k on QStandID=k.[key] inner join QStandType on QStand.QStandTypeID=QStandType.QStandTypeID ) select top 5 * from (select distinct top 5 * from cte where QStandTypeID>(select distinct top 5 * from cte order by QStandTypeID asc) order by QStandTypeID asc )t      提示错误:消息 116,级别 16,状态 1,第 7 行 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。

我是说我的习惯,很多人都是你这样做的 引用 16 楼 linagxiaojing 的回复:引用 14 楼 szstephenzhou 的回复: 分页到程序里做比较好   此言差异。一般数据库相对而言空闲一点,所以有些东西还是数据库来做。类似这样的语句我做过一个存储过程,可以贴出来,以供参考    SQL code   ALTER Procedure [dbo].[Popular_PageList] @ContentOne      nvarchar(20……

上一篇:将 FILESTREAM 作为源的列不支持部分更新 20testcs_dn]
下一篇:【回忆】动网论坛Dvbbs7.0 100MD5ing]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。