جایگشت (permutations)
 
   SQL Server
   ۱۸۳۲۹
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد سلیم آبادی
   ۱۳۹۰/۲/۱۰
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

جایگشت (permutations) مجموعه {1و2و3} برابر است با [1و2و3] و [1و3و2] و [2و1و3] و [2و3و1] و [3و1و2] و [3و2و1]. به این معنا که ترتیب قرار گیری آنها اهیمت دارد. اگر سه عنصر وجود داشته باشد !3 حالت خواهیم داشت.

برای حل این مساله توسط یک Query کاملا Standard کافیست ضرب دکارتی را بکارگیری کنیم.

اگر بطور مثال مجموعه ی ما شامل 6 عنصر باشد برای بدست آوردن انواع ترکیبات ممکنه باید جدول را با خودش 6 بار ضرب دکارتی کرده و سطرهایی که دو یا چند مقدار تکراری در ستونهایشان دارند فیلتر می کنیم. تعداد سطرهایی که باید برگردد !6 خواهد بود یعنی 720 سطر. به همین سادگی.

کد زیر طریقه ی انجام اینکار را نشان می دهد:

declare @t table(i char(1) not null unique)
insert @t values ('a'),('b'),('c'),('d'),('e'),('f');

SELECT * FROM @t

SELECT A.i, B.i, C.i, D.i, E.i, F.i
  FROM @t A, @t B, @t C, @t D, @t E, @t F
 WHERE (
          SELECT COUNT(DISTINCT i)
            FROM (
                   VALUES (A.i), (B.i), (C.i), (D.i), (E.i), (F.i)
                  ) D(i)
       ) = 6;
         
         
/*

======== The Set ==========
i
----
a
b
c
d
e
f

==== All Posible Permutations

i    i    i    i    i    i
---- ---- ---- ---- ---- ----
b    f    e    d    c    a
b    e    f    d    c    a
b    f    d    e    c    a
b    d    f    e    c    a
....
....
....
e    d    a    b    c    f
e    a    d    b    c    f
e    b    a    d    c    f
e    a    b    d    c    f
e    c    b    a    d    f
e    b    c    a    d    f
e    c    a    b    d    f
e    a    c    b    d    f
e    b    a    c    d    f
e    a    b    c    d    f

(720 row(s) affected)

*/