Estou tentando escrever uma consulta ao longo destas linhas:
select *
from tbl
where
col1 = 1
and col2 = 2
and col3 = 3
order by
...
;
Quero primeiro todos os resultados em que todas as 3 WHERE
condições correspondam (3/3), depois todos os resultados em que quaisquer 2 condições correspondam (2/3) e, finalmente, os resultados em que qualquer 1 condição corresponda (1/3).
Cada um desses 3 conjuntos de resultados precisa ser ordenado por (col4, col5, col6)
.
Posso fazer isso em uma única consulta?
Por exemplo:
amostra http://img708.imageshack.us/img708/1646/sampletableresult1.jpg
Script para criar dados de teste:
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
ou, para MS-Access:
Isso alcançaria o que você deseja? Tecnicamente, a exibição em linha não é necessária, pois você pode repetir a instrução case no pedido.