Bu satır boyunca bir sorgu yazmaya çalışıyorum:
select *
from tbl
where
col1 = 1
and col2 = 2
and col3 = 3
order by
...
;
Önce tüm 3 WHERE
koşulun (3/3) eşleştiği tüm sonuçları, daha sonra 2 koşulun eşleştiği tüm sonuçları (2/3) ve son olarak 1 koşulun eşleştiği sonuçları (1/3) istiyorum.
Bu 3 sonuç kümesinin her biri tarafından sipariş edilmelidir (col4, col5, col6)
.
Bunu tek bir sorguda yapabilir miyim?
Örneğin:
örnek http://img708.imageshack.us/img708/1646/sampletableresult1.jpg
Test verileri oluşturmak için komut dosyası:
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
mümkünse 3 olmadan! örnek katılmak 3 ilk col var, ama gerçekte, bundan daha fazla
—
forX
Bu nedenle, 3 koşulun da eşleştiği, ardından herhangi bir 2 koşulun eşleştiği, ardından herhangi bir 1 koşulun eşleştiği ve tüm sonuçları bir araya getirerek, col4, 5 ve 6'ya göre sıralanan tüm satırları bulmak istersiniz.
—
Nick Chammas
Evet, biliyorum, başka bir yol arıyordum, çünkü 3'ten fazla col
—
forX
iyi, şu an onun erişimi için (sql server db almak için bekliyorum)
—
forX
Sonunda SQL Server kullanacaksanız, hızlı sürümü yükleyin . Ücretli bir sürüm için yükseltme yolunu temizleyin ve Access'teki sözdizimi terimleriyle uğraşmayın.
—
Mark Storey-Smith