xp

导航

一个SQL语句的实现

Posted on 2007-08-29 10:53  xp  阅读(268)  评论(0编辑  收藏  举报

学生表student

stuid   name   age

01      xp      20
02      pan     12


学生属性表

id      stuid          type

1          01           A
2          01           b
3          01           C
4          02           A
5          02           C

 


如何得到type是既是A、又是B、又是C的学生(即01号学生)。

依次类推,如何根据客户对type的输入,得到相应的查询记录。比如客户输入A、C就得到既是A又是C的学生(即01和02),客户输入A、B就得既是A、又是B的学生(即01)


解答:

--創建測試環境
Create Table 学生属性表
(id Int,
 stuid Char(2),
 type Varchar(10))
--插入數據
Insert 学生属性表 Select 1,          '01',           'A'
Union All Select 2,          '01',           'b'
Union All Select 3,          '01',           'C'
Union All Select 4,          '02',           'A'
Union All Select 5,          '02',           'C'
GO
--測試
Declare @type Varchar(1000)
Select @type = 'A,B,C'
Select stuid From 学生属性表 Where CharIndex(type, @type) > 0 Group By stuid Having Count(stuid) = Len(@type) - Len(Replace(@type, ',', '')) + 1

Select @type = 'A,C'
Select stuid From 学生属性表 Where CharIndex(type, @type) > 0 Group By stuid Having Count(stuid) = Len(@type) - Len(Replace(@type, ',', '')) + 1
GO
--刪除測試環境
Drop Table 学生属性表
--結果
/*
stuid
01

stuid
01
02
*/