交叉查询

原创 2004年10月22日 11:48:00
最基本的处理方法:  
 
如果表中有主键(记录不重复的字段也可以),可以用类似下面的方法,当然x,y要换成具体的数字,不能用变量:  
 
select  top  y  *  from  表  where  主键  not  in(select  top  (x-1)*y  主键  from  表)  
 
 
 
如果表中无主键,可以用临时表,加标识字段解决.这里的x,y可以用变量.  
 
select  id=identity(int,1,1),*    into  #tb  from  表  
select  *  from  #tb  where  id  between  (x-1)*y  and  x*y-1  
---------------------------------------------------------------  
 
--完善一点的,用存储过程实现的通用过程.  
 
/*--用存储过程实现的分页程序  
 
           显示指定查询结果的第X页  
           此存储过程针对无主键的情况,使用临时表的方法  
           如果有主键,不推荐此方法  
 
--邹建  2003.09--*/  
 
/*--调用示例  
           exec  p_show  'select  *  from  xzkh_new..地区资料'  
 
           exec  p_show  'select  *  from  xzkh_new..地区资料',5,2,'地区编号,地区名称,助记码','地区编号'  
--*/  
 
if  exists  (select  *  from  dbo.sysobjects  where  id  =  object_id(N'[dbo].[p_show]')  and  OBJECTPROPERTY(id,  N'IsProcedure')  =  1)  
drop  procedure  [dbo].[p_show]  
GO  
 
CREATE  Proc  p_show  
@QueryStr  nvarchar(1000),            --查询语句,如果查询表,用:select  *  from  表  
@PageSize  int=10,                                    --每页的大小(行数)  
@PageCurrent  int=1,                                    --要显示的页  
@FdShow  nvarchar  (1000)='',            --要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段  
@FdOrder  nvarchar  (1000)=''            --排序字段列表  
as  
declare  @FdName  nvarchar(50)            --标识列名  
           ,@Id1  varchar(20),@Id2  varchar(20)            --开始和结束的记录号  
select  @FdName='[ID_'+cast(newid()  as  varchar(40))+']'  
           ,@Id1=cast(@PageSize*(@PageCurrent-1)  as  varchar(20))  
           ,@Id2=cast(@PageSize*@PageCurrent-1  as  varchar(20))  
           ,@FdShow=case  isnull(@FdShow,'')  when  ''  then  '*'  else  @FdShow  end  
           ,@FdOrder=case  isnull(@FdOrder,'')  when  ''  then  ''  else  '  order  by  '+@FdOrder  end  
 
exec('select  '+@FdName+'=identity(int,0,1),'+@FdShow+'  
                       into  #tb  from('+@QueryStr+')  a  '+@FdOrder+'  
           select  '+@FdShow+'  from  #tb  where  '+@FdName+'  between  '  
           +@Id1+'  and  '+@Id2  
           )  
GO  

交叉表、行列转换和交叉查询经典

交叉表、行列转换和交叉查询经典 一、什么是交叉表 “交叉表”对象是一个网格,用来根据...
  • cngkqy
  • cngkqy
  • 2007年12月05日 16:01
  • 16127

Mysql5 实现交叉表查询

交叉表、行列转换和交叉查询经典 一、什么是交叉表 “交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个元素组成:     行...
  • a437629292
  • a437629292
  • 2015年12月15日 17:04
  • 1834

oracle 动态交叉查询 行列互换 oracle动态交叉表

问题描述如下: 有张表cityorder,有如下几个列:id,amount,city,date。表中有以下一些记录: id amount city date 1 12 001 08-11-1...
  • heicm
  • heicm
  • 2011年03月17日 15:36
  • 4466

SQL连接查询语句(内、外、交叉和合并查询)

接触Sql语句时间挺长时间了,听他人说过sql语句的连接查询,但一直没有认真研究和使用过!!最近在公司实习,需要用到一些连接的语句,我也从中体会到连接查询带来的方便。 下面总结一下SQL连接查询...
  • u010011371
  • u010011371
  • 2016年01月27日 20:49
  • 4982

sql 交叉表查询

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[Rpt_ProductPrice] @IDEPAR...
  • shilang999
  • shilang999
  • 2014年03月01日 11:10
  • 621

sqlserver一个动态交叉表的范例

社区问的人太多了,保存一个备用--建立测试环境set nocount oncreate table test(model varchar(20),date int ,qty int)insert in...
  • jinjazz
  • jinjazz
  • 2007年12月11日 09:55
  • 2639

sqlserver(相关子查询,动态交叉表篇)

 最近重新又翻看了一下关于sqlserver的书籍,主要查看了一下关于sql中的相关子查询和交叉表方面的知识。相关子查询和普通子查询区别在于:相关子查询引用了外部查询的列。这种引用外部查询的能力意味着...
  • cngkqy
  • cngkqy
  • 2007年12月05日 16:05
  • 2680

ORACLE中 大数据表的交叉数据集的查询 SQL优化方法

由于最近要从2个大表中A(几万条),B(几百万条记录)中查询其中的交集部分,用关联字段的关联查询,太慢,总结出另一个可以解决办法的比较高效语句,特拿来与大家分享,不多说了,下边详细介绍一下我的思路(我...
  • aiunong
  • aiunong
  • 2006年02月27日 17:48
  • 2433

MSSQL交叉表查询

交叉表查询
  • EFU0387
  • EFU0387
  • 2017年05月29日 12:41
  • 186

SqlServer生成交叉表大全

 SqlServer如何生成动态交叉表查询VB+MS SqlServer,是我们目前开发数据库应用系统最常用的模式,翻翻以前的老帖子,有一些SqlServer的问题经常被提出来,但正确解答甚少,现把我...
  • cngkqy
  • cngkqy
  • 2007年12月05日 16:39
  • 12362
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:交叉查询
举报原因:
原因补充:

(最多只允许输入30个字)