私はこれらの行に沿ってクエリを書こうとしています:
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でソートしたいとします。
—
Nick Chammas
ええ、私は知っています。私は別の方法を探していました。なぜならそれは3列を超えるからです
—
forX
最終的にSQL Serverを使用する場合は、Express Editionをインストールします。有料のバージョンへのクリーンなアップグレードパス。Accessでの構文の特異性は扱いません。
—
Mark Storey-Smith