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 três WHERE
condições correspondam (3/3), depois todos os resultados em que duas condições correspondam (2/3) e, finalmente, os resultados em que qualquer condição 1 corresponda (1/3).
Cada um desses três conjuntos de resultados precisa ser solicitado 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
se possível sem 3! juntar-se a amostra tem 3 primeira col, mas, na realidade, a sua mais do que isso
—
forX
Portanto, você deseja encontrar todas as linhas nas quais todas as três condições correspondem, as duas condições e a condição 1 e reunir todos os resultados, classificados por col4, 5 e 6. Isso está correto?
—
Nick Chammas
sim, eu sei, eu estava procurando uma outra maneira, porque é mais do que 3 col
—
forX
bem, para o momento o seu acesso (eu estou esperando para obter o meu db sql server)
—
forX
Se você eventualmente usar o SQL Server, instale a edição expressa . Caminho de atualização limpo para uma versão paga pela versão e sem lidar com idiossincrasias de sintaxe no Access.
—
Mark-Storey-Smith #