সেরা সম্ভাব্য ম্যাচগুলি জিজ্ঞাসা করুন এবং তাদের অর্ডার করুন


9

আমি এই লাইন বরাবর একটি কোয়েরি লিখতে চেষ্টা করছি:

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 টি প্রথম কর্নাল রয়েছে, তবে বাস্তবে, এটি এর চেয়ে বেশি
ফরেক্স

সুতরাং আপনি সমস্ত সারি সন্ধান করতে চান যেখানে সমস্ত 3 শর্ত মেলে, তারপরে যেখানে কোনও 2 শর্ত মেলে, যেখানে কোনও 1 শর্ত মেলে এবং সমস্ত ফলাফল একসাথে রেখে, কল 4, 5 এবং 6 অনুসারে সাজানো এটি কি সঠিক?
নিক চ্যামাস

হ্যাঁ, আমি জানি, আমি অন্যভাবে অনুসন্ধান করছিলাম, কারণ এটি 3
কোণের

1
ঠিক আছে, এই মুহুর্তের জন্য এটির অ্যাক্সেস (আমি আমার এসকিউএল সার্ভার ডিবি পাওয়ার জন্য অপেক্ষা করছি)
ফরেক্স

3
আপনি যদি শেষ পর্যন্ত এসকিউএল সার্ভার ব্যবহার করেন তবে এক্সপ্রেস সংস্করণটি ইনস্টল করুন । সংস্করণটির জন্য অর্থ প্রদানে এবং অ্যাক্সেসে সিনট্যাক্স আইডিসিএনক্র্যাসির সাথে কোনও ডিলের জন্য আপগ্রেড পথ পরিষ্কার করুন।
মার্ক স্টোরী-স্মিথ

উত্তর:


7
SELECT col1, 
       col2,
       col3, 
       col4, 
       col5, 
       col6
FROM TableX 
WHERE col1 = 1 
   OR col2 = 2 
   OR col3 = 3 
ORDER BY (CASE WHEN col1 = 1 THEN 1 ELSE 0 END) +
         (CASE WHEN col2 = 2 THEN 1 ELSE 0 END) +
         (CASE WHEN col3 = 3 THEN 1 ELSE 0 END) DESC,
         col4, col5, col6 

বা, এমএস-অ্যাক্সেসের জন্য:

ORDER BY IIF(col1 = 1,1,0) +
         IIF(col2 = 2,1,0) +
         IIF(col3 = 3,1,0) DESC,
         col4, col5, col6 

@ মার্ক: আপনার সংমিশ্রণের অর্থ কী? আপনি কি একটি উদাহরণ দিতে পারেন?
ypercubeᵀᴹ

@ প্রথমবারের মতো আমি সম্মতি জানাই, +1 :)
মার্ক স্টোরি-স্মিথ

@ মার্ক: থানেক্স, আমি ভাবতে শুরু করেছিলাম যে আমি প্রশ্নটি বুঝতে পারি নি।
ypercubeᵀᴹ

ভাল লাগছে, তবে আমি এখন অ্যাক্সেস ডিবি দিয়ে স্টক করছি, এবং আমি এটি চেষ্টা করে দেখছি এবং ভাল ফলাফল পাচ্ছি না (সিলেক্ট 1, কল 2, কল 3, কল 4, কল 5, কোল 1 থেকে কল 1, 1 বা কোল 2 = 2 বা কল 3 = 3 IIF এর মাধ্যমে অর্ডার (কল 1 = 1,1,0) + IIF (কল 2 = 1,1,0) + IIF (কল 3 = 1,1,0) ডেস্ক, কল 4, কল 5, কল 6)
ফরেক্স

ছোট পরিবর্তন:IIF(col1 = 1,1,0) +IIF(col2 = 2,1,0) +IIF(col3 = 3,1,0) desc
ypercubeᵀᴹ

1

এটি কি আপনি চান অর্জন করবে? প্রযুক্তিগতভাবে ইনলাইন ভিউটি প্রয়োজনীয় নয় কারণ আপনি আদেশের মাধ্যমে কেস স্টেটমেন্টটি পুনরাবৃত্তি করতে পারেন।

select y.col1, 
       y.col2,
       y.col3, 
       y.col4, 
       y.col5, 
       y.col6
from (
      select col1, 
             col2, 
             col3, 
             case when col1 =1 and col2 = 2 and col3 = 3 then
                       1
                  when col1 = 1 and col2 = 2 and col3 <> 3 then
                       2
                  when col1 = 1 then
                       3
                  else 
                       4
             end x,
             col4, 
             col5, 
             col6
       from table
       )y
order by y.x, col4, col5, col6 

1
কল 1 এবং কল 3 মিললে কী হবে? নাকি শুধু কল 2? ওপি 3 টি ম্যাচ, কোনও দুটি ম্যাচ, যে কোনও একটি ম্যাচ সন্ধান করছে।
নিক চ্যামাস 21

1
SELECT col1,
       col2,
       col3,
       col4,
       col5,
       col6
FROM TableName
WHERE col1 = 1
   OR col2 = 2
   OR col3 = 3
ORDER BY (CASE WHEN col1 = 1 THEN 1 ELSE 0 END) DESC,
         (CASE WHEN col2 = 2 THEN 1 ELSE 0 END) DESC,
         (CASE WHEN col3 = 3 THEN 1 ELSE 0 END) DESC,
         col4, col5, col6

না, এই ক্যোয়ারীটি (2 টি ম্যাচ) এর সাথে সারির আগে (col1,col2,col3)= (1,0,0)(1 টি ম্যাচ) দিয়ে সারির অর্ডার করবে (0,2,3)
ypercubeᵀᴹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.