最近在开发一个外包的项目,其中有个需求,一直困扰我好几天,今天终于找到了解决方案。大致需求如下:公司总部发货给经销商,其中经销商包含四种级别,钻石、金牌、银牌和铜牌,等级依次下发,钻石包含金牌,金牌包含银牌,银牌包含铜牌,铜牌下面有终端客户,也就是产品的终端,给客户使用。

如果系统登陆的是钻石经销商,需要查询他的客户,需要把最底层的经销商查出来,最后,查询所属的终端客户。

大致的存储过程:

USE [DbDevice]
GO
/****** Object:  StoredProcedure [dbo].[Pro_FindMaterialByTerminalId]    Script Date: 07/14/2014 14:21:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Pro_FindMaterialByTerminalId]
@DealerId varchar(50),
@MaterialName varchar(50),
@StartDate varchar(50),
@EndDate varchar(50)
AS
BEGIN
 SET NOCOUNT ON;
 declare @where varchar(1000)
 declare @sql varchar(1000)
 declare @select varchar(800)
 declare @order varchar(100)
 declare @type int
 set @where=' '
 set @sql=''
 set @select=''
 set @order=''
 set @type=(select t.Level from Tbl_Dealer t where t.DealerId=@DealerId)
 
 if(@MaterialName<>'') set @where=@where+' And A1.SerialNumber='+@MaterialName
 set @where=@where+' And A1.UseTime>='''+@StartDate+''' And A1.UseTime<='''+@EndDate+''''
 
 if(@type=0)
 begin
      set @select=' select A1.TypeId,A1.SerialNumber,A1.CreateTime,B1.TerminalName,A1.Barcode,A1.ProvinceId,A1.DeviceId,A1.UseTime, A1.Status  from Tbl_Material A1 ,Tbl_Terminal B1
      
      where A1.TerminalId=B1.TerminalId And A1.TerminalId in (select A.TerminalID
    from Tbl_Terminal A
    where A.DealerId in (select H.DealerId From Tbl_Dealer H where H.ParentId in(
   select G.DealerId From Tbl_Dealer G where G.ParentId in(
   select F.DealerId From Tbl_Dealer F where F.ParentId in
   (select E.DealerId from Tbl_Dealer E where E.DealerId='''+@DealerId+''')))))'
 end
 if(@type=1)
 begin
    set @select=' select A.TerminalID
    from Tbl_Terminal A
    where A.DealerId in (
   select G.DealerId From Tbl_Dealer G where G.ParentId in(
   select F.DealerId From Tbl_Dealer F where F.ParentId in
   (select E.DealerId from Tbl_Dealer E where E.DealerId='''+@DealerId+''')))'
 end
 if(@type=2)
 begin
   set @select=' select A.TerminalID
    from Tbl_Terminal A
    where A.DealerId in (
   select F.DealerId From Tbl_Dealer F where F.ParentId in
   (select E.DealerId from Tbl_Dealer E where E.DealerId='''+@DealerId+'''))'
 end
 if(@type=3)
 begin
   set @select=' select A.TerminalID
    from Tbl_Terminal A
    where A.DealerId in (
   select E.DealerId from Tbl_Dealer E where E.DealerId='''+@DealerId+''')'
 end
 
 set @order=' order by A1.UseTime desc'
 set @sql=@select+@where+@order
 print @sql
 exec (@sql)
END

sql 多级内查询的更多相关文章

  1. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  2. 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

    前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...

  3. sql跨库查询

    ---------------------------------------------------------------------------------- --1. 创建链接服务器 --1. ...

  4. SQL表连接查询(inner join、full join、left join、right join)

    SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...

  5. SQL Server 内置函数、临时对象、流程控制

    SQL Server 内置函数 日期时间函数 --返回当前系统日期时间 select getdate() as [datetime],sysdatetime() as [datetime2] getd ...

  6. SQL语句 - 嵌套查询

    嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询.其中外层查询也称为父查询,主查询.内层查询也称子查询,从查询. ...

  7. [.NET] SQL数据分页查询

    [.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...

  8. 如何在 Linux 上用 SQL 语句来查询 Apache 日志

    Linux 有一个显著的特点,在正常情况下,你可以通过日志分析系统日志来了解你的系统中发生了什么,或正在发生什么.的确,系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源.我们将在这篇文章中 ...

  9. 50种方法优化SQL Server数据库查询

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...

随机推荐

  1. android HAL 教程(含实例)

    http://www.cnblogs.com/armlinux/archive/2012/01/14/2396768.html Android Hal 分析                       ...

  2. EXCEL如何提取文字中包含的数字?

    方法1:=IF(ISERROR(FIND("-",A1)),"","-")&MID(SUM(MID(101&A1,2+LAR ...

  3. Android 软件盘 Editext 问题

    显示的问题:android:windowSoftInputMode="adjustPan|stateHidden" 弹出布局Editext并且挤上去 android:windowS ...

  4. mysql安装和mysql图形界面安装以及文本文件导入mysql

    本人大一大二一直使用windows系统,被微软爸爸给惯坏了,一看到cmd命令行就吓尿.现在用ubuntu,每一个操作都是语句,也是得到锻炼(个jb). ubuntu安装mysql和python代码 s ...

  5. 开发一个IONIC应用的首要操作(宏观)

    1.创建工程 2.搭建路由(routes.js) 3.添加控制(controller.js) 4.加载模块(app.js)

  6. Stl源码剖析 第三章 iterator摘要

    1. Stl的设计思想是: 将数据容器和算法分开,彼此独立设计,最后再以一贴胶合剂将它们撮合在一起,这个胶合剂就是迭代器. 2. 从3.2节迭代器的实现可知,如果要设计一个与容器分离实现的迭代器,会暴 ...

  7. WCF入门简单教程(图文) VS2010版

    在这个例子中我们将使用VS 2010 创建一个WCF服务,其中会了解 [DataContract] [ServiceContract] 等特性.  内置的 WCFSVCHost ,并使用“WCF测试客 ...

  8. jQuery index()

    index() index() 方法返回指定元素相对于其他指定元素的 index 位置. 语法 $(selector1).index(selector2) selector2:可选,指定元素:为空时默 ...

  9. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  10. NPOI的使用Excel模板导出

    private string ExportScMeeting(DataTable source) { string templateFile = Server.MapPath(@"Excel ...