چالش: حل مسائل مرتبط به هم توسط تکنیکی یکسان
 
   T-SQL Challenges
   ۹۱۳۸
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد سلیم آبادی
   ۱۳۹۰/۳/۲۴
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

مساله

این چالش از سه زیر مساله تشکیل شده است که بعد از گذشت 3 روز در یک پست دیگر پاسخ ها را قرار میدهم. شما میتوانید از طریق ایمیل جواب های مورد نظرتان را برام ارسال کنید تا در پست مربوط به پاسخ ها همراه با نکاتی که ممکنه برای reform کردن راه حل استفاده بشه به آنها اشاره کنم

ابتدا جداول زیر را ایجاد و داد های نمونه را درج کنید:

CREATE TABLE SupParts
(
sno CHAR(2) NOT NULL, --Supplier No
pno CHAR(2) NOT NULL,  --Part No

PRIMARY
KEY (sno, pno));

INSERT INTO SupParts (sno, pno)
VALUES
(1, 1), (1, 2), (1, 3),
      
(2, 1), (2, 2), (2, 3),
      
(3, 1), (3, 2), (3, 3),
      
(4, 1), (4, 2),
      
(5, 2), (5, 3),
      
(6, 1), (6, 2), (6, 3), (6, 4),
      
(7, 1), (7, 2) ; 

CREATE TABLE Goal
(
pno CHAR(2) PRIMARY KEY,
 cnt INT NOT NULL
  CHECK (cnt > 0)); 

INSERT Goal VALUES (1, 1), (2, 1), (3, 1), (4, 1);

 

مساله 1:

نتیجه ی زیر خروجی مطلوب این مساله می باشد:

sno  sno

---- ----

1    2

1    3

2    3

4    7

 

به این معنا که "زوج شماره تولید کنندگانی که دقیقا یک محصولات را تولید کرده اند"
راه حل بایستی از تکنیک الحاق سطرها
ایجاد شده باشد آن هم روش FOR XML PATH. چرا که روش های دیگه پویایی ندارند.

مساله 2:

نتیجه ی مورد نظر و مطلوب این است:

sno_list pno_list

___________________

4 ,7     1 ,2

1 ,2 ,3  1 ,2 ,3

6        1 ,2 ,3 ,4

5        2 ,3

 

لیست افرادی که دقیقا یک محصول را تولید کرده اند را انتخاب کرده و در ستون بعدی لیست محصولاتی که تولید کرده اند را نشان دهید.
بطور نمونه تولید کننده های شماره 4 و 7 هر دو دو محصول 1 و 2 را تولید کرده اند و تولید کنندی به غیر از شماره 5 وجود ندارد که دقیقا همان محصولات را تولید کرده باشد.
این مساله هم دقیقا بایستی توسط روش قبلی یعنی الحاق توسط
XML صورت بگیرد.

مساله 3:

لیست افرادی (sno) را بدست بیاورید که دقیقا تمام محصولات موجود در جدول Goal را تولید کرده اند. و تعداد تولید هر محصول دقیقا باید برابر باشد با ستون cnt مرتبط به آن محصول. راه حل شما باید این مساله را بررسی کنید. البته با طراحی جدول امکان درج محصول برای یک فرد آن هم بیش از یک بار امکان پذیر نیست (به کلید جدول توجه کنید).

بطور مثال در اینجا تولید کننده شماره 6 دقیقا تمام مقادیر موجود در جدول Goals را به همان تعداد (یعنی 1 بار به ازای هر محصول) تولید کرده است. اگر همین تولید کننده محصولی با شماره مثلا 8 نیز تولید کرده بود دیگر به عنوان جواب نبایستی انتخاب شود. یا اینکه محصول شماره 1 را 4 بار تولید کرده بود باز هم نباید انتخاب می شد.

این راه حل هم باید از تکنیک الحاق مساله را حل کند.