Saya mencoba menulis kueri di bawah ini:
select *
from tbl
where
col1 = 1
and col2 = 2
and col3 = 3
order by
...
;
Saya ingin semua hasil pertama di mana semua 3 WHERE
kondisi cocok (3/3), lalu semua hasil di mana 2 kondisi cocok (2/3), dan akhirnya hasil di mana semua 1 kondisi cocok (1/3).
Masing-masing dari 3 set hasil ini harus dipesan oleh (col4, col5, col6)
.
Bisakah saya melakukannya dalam satu permintaan?
Sebagai contoh:
sample http://img708.imageshack.us/img708/1646/sampletableresult1.jpg
Script untuk membuat data uji:
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
Jawaban:
atau, untuk MS-Access:
sumber
IIF(col1 = 1,1,0) +IIF(col2 = 2,1,0) +IIF(col3 = 3,1,0) desc
Apakah ini akan mencapai apa yang Anda inginkan? Secara teknis tampilan inline tidak diperlukan karena Anda dapat mengulangi pernyataan kasus dalam urutan oleh.
sumber
sumber
(col1,col2,col3)
=(1,0,0)
(1 kecocokan) sebelum baris dengan(0,2,3)
(2 kecocokan).