ฉันพยายามเขียนแบบสอบถามตามบรรทัดเหล่านี้:
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 เซิร์ฟเวอร์ของฉัน db)
—
forX
ถ้าคุณจะได้รับการใช้ SQL Server ติดตั้งรุ่นด่วน ล้างเส้นทางการปรับรุ่นเป็นรุ่นที่ต้องชำระเงินและไม่มีการจัดการกับไวยากรณ์ที่เป็นเอกลักษณ์ใน Access
—
Mark Storey-Smith