View Full Version : راه حل چیست؟
bardia goharbin
پنج شنبه 05 بهمن 1385, 19:56 عصر
یک Table دارم بصورت زیر :
Col1 | Col2
-------------------------------
Null | ali
aaa | Null
قصد دارم یک Query داشته باشم که این خروجی را بدهد.
Col1 | Col2
-------------------------------
aaa | ali
آیا راه حلی وجود دارد؟ یا Table ناقص است؟
Neeloofar
پنج شنبه 05 بهمن 1385, 20:44 عصر
یعنی جدول شما همین دو رکورد رو داره؟ در این صورت راه حل ساده است. یک اسکریپت بنویس که مقدار Null رکورد اول رو فیلد دوم رکورد دوم پر کنه.
ولی اگر رکوردها شد 3 تا اونوقت ازکجا معلوم مقدار Null رکورد 1 رو، رکورد 2 پُر کنه یا رکورد 3؟ حالا فرض کن رکوردها شدن 1000 تا!!!؟
linux
پنج شنبه 05 بهمن 1385, 20:53 عصر
جدولت را بگذار اینجا و بگو دقیقا چی می خواهی؟
AminSobati
پنج شنبه 05 بهمن 1385, 23:32 عصر
اگر جدول شما سه رکورد داشت و در فیلد اول دو Null ولی در فیلد دوم، یک Null چی؟
bardia goharbin
جمعه 06 بهمن 1385, 08:34 صبح
نه دوستان جدول من همین دو رکورد را ندارد.
این Table را یک فرد ناشی ساخته است و به بدلیل وجود دیتا و استفاده در نرم افزار دیگری نمیتوانیم آنرا تغییر دهیم.
در اصل هر رکورد بایستی دارای دو فیلد پر از دیتا باشد. ولی به جای اینکه دو فیلد را پر کند بر اثر حماقت برای هر نفر دو رکورد و حتی بعضی مواقع یک رکورد اضافه کرده است که هر بار یکی از فیلدها Null است و دیگری پر و یا در برخی رکوردها هر دو Null است.
حالا میخواهم با یک سری دستور یک Query ایجاد کنم و بصورتی که در پست اول گفته شد و اینجا با یک سری تغییرات مجددا گفته میشود نمایش دهیم.
بدلیل اینکه Table ناقص بود و کاری نمیتوانستم انجام دهم مجبور شدم یک فیلد ID اضافه کنم تا عملیات قابل اجرا باشد.
فرض را بر این بگیرید که یک فیلد ID هم به این Table اضافه کردیم که بدین صورت است
ID....|....Col1....|..........Col2...
-----------------------------------
ID1....|.....Ali......|..........Null...
ID1....|......Null....|....Ahmadi...
ID2....|.....Null....|........Alavi...
ID2....|....Sahar..|.........Null...
ID3....|.....Null....|.........Null...
ID3....|.....Null....|.........Null...
ID4....|...Sahar...|.........Null...
ID5....|....Null.....|......Zahed...
چیزی که باید نمایش دهیم را بصورت ذیل میخواهیم
ID....|....Col1....|..........Col2...
-----------------------------------
ID1....|......Ali.....|....Ahmadi...
ID2....|...Sahar...|........Alavi...
ID3....|.....Null.....|.........Null...
ID4....|...Sahar...|.........Null...
ID5....|....Null.....|.....Zahed...
فقط لازم به ذکر است که نمیخواهم اطلاعات تغییر یابد و به همان صورت اولیه باقی بماند
اگر دستورات را برای استفاده در Sql2005 لطف کنید ممنون میشوم چون خود من هم مبتدی هستم
whitehat
جمعه 06 بهمن 1385, 10:25 صبح
راهی که من به ذهنم می رسه اینه :
SELECT DISTINCT Id,Col1,Col2 FROM TableName
WHERE (Col1 IS NULL) AND (Col2 IS NULL)
UNION
SELECT Tbl1.Id,Tbl1.Col1,Tbl2.Col2 FROM
TableName Tbl1 INNER JOIN TableName Tbl2
ON Tbl1.Id=Tbl2.Id
WHERE (Tbl1.Col1 IS NOT NULL) AND (Tbl2.Col2 IS NOT NULL)
bardia goharbin
جمعه 06 بهمن 1385, 10:37 صبح
ممنونم واقعا تبحر دارید
ای کاش یک توضیح کوچولو هم میدادی ولی به هر حال خروجی دستوراتی که شما گفتید تا حدودی درست بود و این خروجی را داد.
ID....|....Col1....|..........Col2...
-----------------------------------
ID1....|......Ali.....|....Ahmadi...
ID2....|...Sahar...|........Alavi...
ID3....|.....Null.....|.........Null...
ولی دو رکورد کمتر از اون چیزی که دنبالش بودم یعنی این دو رکورد را نیاورده اگر این هم حل بشه خیلی خیلی ممنونم ازتون
ID4....|...Sahar...|.........Null...
ID5....|....Null.....|.....Zahed...
whitehat
جمعه 06 بهمن 1385, 11:46 صبح
ببخشید من فکر کردم از هر ID دوتا موجود است
راه حل:
SELECT DISTINCT
CASE WHEN Tbl1.Id IS NULL THEN Tbl2.Id ELSE Tbl1.Id END AS ID
,Tbl2.Col2,Tbl1.Col1
FROM
(SELECT * FROM TableName WHERE Col2 IS NULL) Tbl1
FULL OUTER JOIN
(SELECT * FROM TableName WHERE Col1 IS NULL) Tbl2
ON Tbl1.ID=Tbl2.ID
bardia goharbin
جمعه 06 بهمن 1385, 12:27 عصر
واقعا ممنونم.
برای آخرین سئوال این که اگر فیلد ID از این Table حذف بشه آیا باز هم میتوان عملیات فوق را انجام داد؟
whitehat
جمعه 06 بهمن 1385, 12:37 عصر
در صورتی که جدول شما ID نداشته باشه شما نمی دانید هر فیلد جلوی کدام فیلد باید قرار گیرد!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.