Я пытаюсь написать запрос по этим направлениям:
select *
from tbl
where
col1 = 1
and col2 = 2
and col3 = 3
order by
...
;
Сначала я хочу получить все результаты, в которых WHERE
совпадают все 3 условия (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 col
—
forX
хорошо, на данный момент его доступ (я жду, чтобы получить мой sql server db)
—
forX
Если вы в конечном итоге будете использовать SQL Server, установите экспресс-выпуск . Очистить путь обновления до платной версии и не иметь дело с особенностями синтаксиса в Access.
—
Марк Стори-Смит