Я намагаюся написати запит у цих рядках:
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. Це правильно?
—
Нік Чаммас
так, я знаю, я шукав інший спосіб, тому що його більше, ніж 3 кола
—
ForX
ну, на даний момент його доступ (я чекаю отримати свій сервер sql db)
—
forX
Якщо ви згодом будете використовувати SQL Server, встановіть експрес-версію . Чистий шлях оновлення до платної версії та не має стосунків із синтаксичними ідіосинкразіями в Access.
—
Марк Сторі-Сміт