条件放在表中的SQL查询的解决方案

本文介绍了一种将查询条件存储在表中的特殊SQL查询方法,适用于不同数量级和类型的查询条件。通过示例展示了如何使用动态SQL、用户自定义函数以及游标来解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条件放在表中的SQL查询的解决方案

  当把查询条件放在表的某个列中,需要根据这些条件进行查询或其它操作时。大体分为以下几种情况。

(一)、条件有多种,并且是少量时。

例如:

 表TableA:

TableName   RowNum strSQL

-----------------------------------------------

TableB          1                  acc Between 1 and 9

TableB           2                 acc Between 11 and 19

TableB           3                acc   in (1,3,5)

TableB          4                 cls  like 'cls%'

TableC          5                 acc Between 10 and 100

……

表TableB

RowNum   acc      cls          qty

----------------------------------------

1                   1        cls            100

1                   5        c                 200

1                   8        cl                300

1                   10       clscs        400

2                   0          c                 500

2                  15         a                600

2                  20          s               700

4                 2             l                 800

4                3             cls              900

4                4             clsear       1000

……

由于条件较少,可使用动态SQL实现。

Declare @strTableName varchar(20)

Set @strTableName='TableB'

Declare @strSQL varchar(8000)

Set @strSQL=''

Select @strSQL=@strSQL+'Select '+Cast(RowNum As Varchar) +' As RowNum,Sum(Isnull(Qty,0)) As TotalQty

                                 From +@strTableName +' where '+ @strSQL +' Union All '

From TableA

Where TableName  = @strTableName

Set @strSQL ='Select * From ( '+Substring(@strSQL ,1,Len(@strSQL)-10)+')T'

Exec(@strSQL)

(二)、条件类型有有限种,并且是大量时。

(1)条件只有一种类型的情况。

例如:

 表TableA:

TableName   RowNum strSQL

-----------------------------------------------

TableB          1                  acc Between 1 and 9

TableB           2                 acc Between 11 and 19

TableB           3                acc Between 11 and 19

TableB          4                 acc Between 11 and 19

TableB          5                 acc Between 10 and 100

……

表TableB

RowNum   acc      cls          qty

----------------------------------------

1                   1        cls            100

1                   5        c                 200

1                   8        cl                300

1                   10       clscs        400

……

Select RowNum,Sum(Isnull(Qty,0)) As TotalQty

From TableB

Where acc Between Cast(Substring(strSQL,Charindex('Between',strSQL)+8,Charindex('and',strSQL)-Charindex('Between',strSQL)-8) As Integer) And Right(,strSQLCharindex('and',strSQL)+4)

(2)、条件有有限的多种类型的情况。

代码由上面类似,只是不上面稍微复杂一点。

最好写一个用户自定义函数实现之。

(三)、条件有多种,并且是大量时。

在这种情况下,应该是考虑使用游标或循环实现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值