我正在尝试按照以下方式编写查询:
select *
from tbl
where
col1 = 1
and col2 = 2
and col3 = 3
order by
...
;
我首先要获得所有3个WHERE
条件都匹配(3/3)的所有结果,然后要获得任何2个条件都匹配(2/3)的所有结果,最后要获得任何1个条件都匹配(1/3)的所有结果。
这3个结果集中的每个都需要按排序(col4, col5, col6)
。
我可以在一个查询中做到吗?
例如:
样本http://img708.imageshack.us/img708/1646/sampletableresult1.jpg
创建测试数据的脚本:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') AND type in (N'U'))
DROP TABLE [dbo].[MyTable]
GO
CREATE TABLE dbo.MyTable
(
col1 INT
, col2 INT
, col3 INT
, col4 INT
, col5 INT
, col6 INT
)
GO
INSERT dbo.MyTable (col1, col2, col3, col4, col5, col6)
SELECT 1,2,3,2,1,1 UNION ALL
SELECT 1,2,30,1,1,1 UNION ALL SELECT 1,20,30,1,1,1 UNION ALL
SELECT 10,20,3,1,1,1 UNION ALL SELECT 10,2,30,1,1,1 UNION ALL
SELECT 10,2,3,1,1,1 UNION ALL SELECT 10,20,30,1,1,1 UNION ALL
SELECT 1,2,3,1,1,1 UNION ALL SELECT 1,2,3,1,2,2 UNION ALL
SELECT 1,2,3,1,2,3 UNION ALL SELECT 1,20,3,1,1,1
GO
如果可能的话不加3!加入样本的人拥有3个第一栏,但实际上,它的数量更多
—
forX
因此,您要查找所有3个条件都匹配的所有行,然后找到2个条件都匹配的行,然后找到1个条件都匹配的行,并将所有结果放在一起,按col4、5和6排序。这是正确的吗?
—
Nick Chammas
是的,我知道,我在寻找另一种方法,因为它的长度超过3列
—
forX
好吧,目前它的访问权限(我正在等待获取我的sql server数据库)
—
forX
如果最终要使用SQL Server,请安装Express Edition。干净升级到付费版本的升级路径,并且不处理Access中的语法特质。
—
Mark Storey-Smith