我正在尝试按照以下方式编写查询:
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
或者,对于 MS-Access:
这会达到你想要的吗?从技术上讲,内联视图不是必需的,因为您可以按顺序重复 case 语句。