积极答复者
这样的查询如何实现?

问题
-
数据库结构与数据
ID----------Num 56----------8 65----------2 66----------0 68----------3 70----------8 88----------9 89----------8 90----------2 92----------0 93----------5
比如用户输入三个数8、2、0。让这三个去数据库里面比对Num。先找8,找到8以后看下面是不是2,如果是再向下找是不是0.如果都满足了就返回数据。注意数据库里不一定只有一组8、2、0。只要满足都要返回。唉小弟现在不知道如何下手了,是使用游标吗?- 已移动 BU XI - MSFT 2011年5月24日 2:10 (发件人:ASP.NET 与 AJAX)
答案
-
你好,
根据你的描述,我通过公用表表达式和密集排名函数模拟了你的需求:
USE tempdb; CREATE TABLE t1(id INT, num INT); INSERT INTO t1 SELECT 56,8 UNION ALL SELECT 65,2 UNION ALL SELECT 66,0 UNION ALL SELECT 68,3 UNION ALL SELECT 70,8 UNION ALL SELECT 88,9 UNION ALL SELECT 89,8 UNION ALL SELECT 90,2 UNION ALL SELECT 92,0 UNION ALL SELECT 93,5; DECLARE @input1 INT,@input2 INT,@input3 INT; SELECT @input1=8, @input2=2, @input3=0; ;WITH cte AS ( SELECT * FROM t1 WHERE num = @input1 UNION ALL SELECT * FROM t1 WHERE num = @input2 UNION ALL SELECT * FROM t1 WHERE num = @input3 ) SELECT id,num FROM ( SELECT *, DENSE_RANK() OVER(ORDER BY num) as rn FROM cte ) AS t2 WHERE rn=1;
Best Regards,
Stephanie Lv
- 已标记为答案 hkstb 2011年5月25日 17:06
全部回复
-
你好,
根据你的描述,我通过公用表表达式和密集排名函数模拟了你的需求:
USE tempdb; CREATE TABLE t1(id INT, num INT); INSERT INTO t1 SELECT 56,8 UNION ALL SELECT 65,2 UNION ALL SELECT 66,0 UNION ALL SELECT 68,3 UNION ALL SELECT 70,8 UNION ALL SELECT 88,9 UNION ALL SELECT 89,8 UNION ALL SELECT 90,2 UNION ALL SELECT 92,0 UNION ALL SELECT 93,5; DECLARE @input1 INT,@input2 INT,@input3 INT; SELECT @input1=8, @input2=2, @input3=0; ;WITH cte AS ( SELECT * FROM t1 WHERE num = @input1 UNION ALL SELECT * FROM t1 WHERE num = @input2 UNION ALL SELECT * FROM t1 WHERE num = @input3 ) SELECT id,num FROM ( SELECT *, DENSE_RANK() OVER(ORDER BY num) as rn FROM cte ) AS t2 WHERE rn=1;
Best Regards,
Stephanie Lv
- 已标记为答案 hkstb 2011年5月25日 17:06