SQL——处理页面多条件查询

以前处理多条件查询,主要是两种方法,第一种是在条件里面判断要填入条件的字段,然后判断传入参数是否为空,如果为空,就用1=1替代这个条件;第二种方法,先判断传入参数是否为空,如果不为空,将条件拼接到一个字符里面,最后再使用exec执行字符串;最近又要做这个东西,感觉还是挺熟悉的,额,,其实是挺无聊的。但是在做的过程中跟旁边大哥闲扯的时候,他又给我写了一种case...when...end..的方式,贴出来给大家看看:

ALTER PROCEDURE [dbo].[sp_LoadSellerDataByPartner] 

--通用参数
  @PartnerCode NVARCHAR(36),--合伙人编码
  @pageSize INT=10, --一页内有多少条数据
  @pageIndex INT=1, --第几页 

 ----多条件查询参数(商家编号,商家名称,入驻时间,合伙人姓名)
	@QureSellerNumber NVARCHAR(36), --商家
	@QuerSellerName NVARCHAR(100), --商家名称
        @QuerBuildTime NVARCHAR(36),	--入驻时间
	@QueryUserName NVARCHAR(100)	--合伙人姓名

AS

DECLARE @totalCount INT; --共有多少条数据 

--查询出商家编号,商家名称,商家地址,入驻时间,合伙人姓名,本期订单数量,累计营业额
WITH temp AS (

		SELECT s.[SellerNumber]/*商家编号*/,
			s.Code,/*商家code*/
			s.[SellerName]/*商家名称*/,
			s.[Address]/*商家地址*/,
			LEFT(convert(varchar,s.[BuildTime],21),10) AS BuildTime/*入驻时间*/,
			cpu.[UserName]/*合伙人姓名*/,

			(SELECT COUNT(1) FROM  CommunityCatering.Catering.[Order] o WHERE o.SellerCode=s.Code AND o.CompleteTime BETWEEN DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0) AND GETDATE() ) AS OrderCount/*查询从月初到现在的订单量*/,

			(SELECT SUM(TotalCharge) FROM [CommunityCatering].[Catering].[SellerIncome] SI WHERE SI.CreateTime BETWEEN DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0) AND GETDATE() AND s.Code=SI.SellerCode AND SI.ValidStatus=1) AS SumMonthMoney/*本期营业额(注意判断有效性)*/,

			(SELECT SUM(TotalCharge) FROM [CommunityCatering].[Catering].[SellerIncome] SA WHERE  SA.SellerCode=s.Code AND SA.ValidStatus=1) AS SumTotalMoney/*累计营业额(注意判断有效性)*/,

			ROW_NUMBER() OVER(ORDER BY s.[SellerNumber]) AS RowNum/*分页需要字段*/

	FROM [CommunityCatering].[Catering].[Seller] s
		LEFT JOIN [CommunityCatering].[Catering].[CateringPartnerUser] cpu
		ON cpu.Code=s.[PartnerUserCode]
	WHERE s.ValidStatus=1/*审核通过商家*/
			AND [email protected]这里需要合伙人(例如:'ff48648d-4e61-b702-4f12-80ed41d791ae')

)

SELECT * FROM temp
	WHERE
	/*下面将查询条件加入:商家编号,商家名称,入驻时间,合伙人姓名*/
	 --商家编号
	  (CASE  WHEN ISNULL(@QureSellerNumber,'0')='0' OR @QureSellerNumber=''  THEN  1 ELSE 

		CAST(CHARINDEX(@QureSellerNumber,temp.[SellerNumber]) AS BIT) 

		END)=1
	AND --商家名称
		(CASE  WHEN ISNULL(@QuerSellerName,'0')='0' OR @QuerSellerName=''  THEN  1 ELSE 

		CAST(CHARINDEX(@QuerSellerName,temp.[SellerName]) AS BIT) 

		END)=1
	AND --入驻时间
		(CASE  WHEN ISNULL(@QuerBuildTime,'0')='0' OR @QuerBuildTime=''  THEN  1 ELSE 

		CAST(CHARINDEX(@QuerBuildTime,temp.[BuildTime]) AS BIT) 

		END)=1
	AND --合伙人姓名

		(CASE  WHEN ISNULL(@QueryUserName,'0')='0' OR @QueryUserName=''  THEN  1 ELSE 

		CAST(CHARINDEX(@QueryUserName,temp.[UserName]) AS BIT) 

		END)=1 

	AND
		 temp.RowNum BETWEEN (((@pageSize)*(@pageIndex-1))+1) and (@pageIndex)*(@pageSize)   /*根据rownum进行分页*/

--输出一共有多少行:程序中进行分页需要这个东西
	SELECT @totalCount
		=(SELECT COUNT(s.[SellerNumber])
	FROM [CommunityCatering].[Catering].[Seller] s
		LEFT JOIN [CommunityCatering].[Catering].[CateringPartnerUser] cpu
		ON cpu.Code=s.[PartnerUserCode]
	WHERE [email protected])

--输出计算出的总行数
	SELECT @totalCount

个人感觉,这种方法也挺巧妙的,有兴趣的童鞋可以查出case..这个东西的用法,感觉挺好玩儿的。

时间: 2024-08-24 13:23:46

SQL——处理页面多条件查询的相关文章

Atitit.列表页面and条件查询的实现最佳实践(2)------翻页 分页 控件的实现java .net php

Atitit.列表页面and条件查询的实现最佳实践(2)------翻页 分页 控件的实现java .net php 1. 关于翻页有关的几大控件::搜索框控件,显示表格控件,翻页器,数据源控件.. 1 2. 翻页的显示格式:: 1 2.1. 通常ui--"首页"."上页"."下页"."末页",还要有Goto到指定页 1 2.2. 百度式::...<上一页567891011121314下一页 2 2.3. 综合的页面 首

一款仿淘宝购物的商品列表页面多条件查询(含有单选和全部)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

Atitit.列表页面and条件查询的实现最佳实践(1)------设置查询条件and提交查询and返回json数据

1. 1.?配置条件字段@Conditional 1 1 2. 2.?配置条件字段显示类型为[email protected](displayType?=?displayType.rang,?rangStart?=?rang.start,?rangEnd?=?rang.end,op=op.range) 1 3. #----show  condition  page  list 1 4. 提交条件查询表单by dwr 1 5. @filter  ::   set filter condition 

MyBatis中动态SQL语句完成多条件查询

http://blog.csdn.net/yanggaosheng/article/details/46685565 MyBatis中动态SQL语句完成多条件查询 <select id="queryEmp"  resultType="cn.test.entity.Emp"> select * from emp where 1=1 <if test="deptNo!=null"> and deptno=#{deptNO} &

2016/3/30 租房子 ①建立租房子的增、删、改php页面 ②多条件查询 ③全选时 各部分全选中 任意checkbox不选中 全选checkbox不选中

字符串的另一种写法:<<<AAAA; 后两个AA回车要求定格  不然报错 例子: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <?php 9 $str = &

(十五)条件查询

条件查询信息列表 1.  在baseDao.baseDaoImpl中编写和实现findObjects(String hql, List<Object> parameters) 2.  在service.serviceImpl中调用baseDao中的条件查询方法 3.  在action中用service中新写的findObjects(String hql, List<Object> parameters)进行条件查询 4.  添加listUI.jsp中的查询方法. 优化查询-查询工具

sql where 1=1和 0=1 的作用(多条件查询错误的问题)

where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where  1=1  在多条件查询中的困扰 举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下: string MySqlStr="select * from table where": if(Age.Text.Lenght>0) { MySqlStr=MySqlStr+"

JSP+Servlet+javabean+oracle实现页面多条件模糊查询

之前写过一篇JSP+Servlet+javabean+mysql实现页面多条件模糊查询 使用的是mysql进行的分页查询,mysql用limit控制,而oracle则是用rownum,今天第一次写oracle,查了一下资料试了一下,把代码帖出来 oracle的数据源配置也不同: driverName=oracle.jdbc.driver.OracleDriver url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:orcl username=marketManag

如何从页面SQL语句进行相关后台查询

前几天刚刚做了一个页面书写sql语句,到后台查询相关结果的案例,给大家分享一下.有不足之处请大家多指教!!! 一.页面:因为查询的表不固定,所以表格需要自助生成(这是利用了"jqGrid") 若是不利用"jqGrid"也可以参考方法2. 方法1. <div> <nobr> <div> <form method="get" action="/management/transactionFlow/i