PDA

View Full Version : سوال: نمایش رکوردهای تکراری



mohamadlvs
سه شنبه 20 تیر 1391, 09:33 صبح
سلام
(این تایپیک رو در تالار Sql هم زدم ولی کسی جواب نداده. برا همین در تالار #c که یکی از بهترین هاست گذاشتم ، امیدوارم که جواب بگیرم و همچنین حذف هم نشوم)
در این کوئری اگر در جدول CreditDebt مقدار WholesalerName تکراری باشد یعنی 2 یا 3 یا بیشتر باشد حاصل به ازای هر بار تکرار 2 بار نمایش داده می شود یعنی اگر 3 بار باشد 6 بار نمایش می یابد با 3 رکورد تکراری!
SELECT CreditDebt.SaleOrBuyID, Wholesaler.WholesalerName, Sales.SaleDate, CreditDebt.GoldWhigtDebtor, CreditDebt.ChequeNumber, CreditDebt.ChequeDate, Bank.Name
FROM CreditDebt INNER JOIN
Wholesaler ON CreditDebt.CustomerID = Wholesaler.WholesalerID INNER JOIN
Sales ON Wholesaler.WholesalerID = Sales.CustomerID INNER JOIN
Bank ON CreditDebt.BankID = Bank.BankID
نتیجه
3 علي زارع 1391/04/19 10.97 65 1391/04/19 ملي
10 رضا رمضاني 1391/04/19 5 55 1391/03/19 ملت
13 رضا رمضاني 1391/04/19 3 333 1391/04/12 ملت
10 رضا رمضاني 1391/04/19 5 55 1391/03/19 ملت
13 رضا رمضاني 1391/04/19 3 333 1391/04/12 ملت
20 صندوق1 1391/04/19 61.65 123 1391/04/19 ملي

ولی وقتی جدول Sales را حذف می کنم درست می شود
SELECT CreditDebt.SaleOrBuyID, Wholesaler.WholesalerName, CreditDebt.GoldWhigtDebtor, CreditDebt.ChequeNumber, CreditDebt.ChequeDate, Bank.Name
FROM CreditDebt INNER JOIN
Wholesaler ON CreditDebt.CustomerID = Wholesaler.WholesalerID INNER JOIN
Bank ON CreditDebt.BankID = Bank.BankID

نتیجه
3 علي زارع 10.97 65 1391/04/19 ملي
20 صندوق1 61.65 123 1391/04/19 ملي
10 رضا رمضاني 5 55 1391/03/19 ملت
13 رضا رمضاني 3 333 1391/04/12 ملت

اینم تصویر جداول. لطفن راهنمایی کنید

veniz2008
سه شنبه 20 تیر 1391, 10:03 صبح
سلام، سوالتون یه خورده گنگه، دقیقا میخواید چه گزارشی رو بگیرید؟ عکسی هم که گذاشتید یه جاییش واسه من سواله، جداول wholesaler و creditdebt چطور با هم ارتباط دارند؟(کدوم فیلدها با هم برابرند؟). یه لطفی کن یه عکس کامل از دیاگرامت بذار.

veniz2008
سه شنبه 20 تیر 1391, 10:17 صبح
جدول wholesaler که با جدول sale ارتباط نداره که اومدی بینشون join زدی( با این دستور Wholesaler.WholesalerID = Sales.CustomerID)
شرط هایی که گذاشتی اشتباهه و البته دو جدول بالا هم نمیتونن با هم join بشن چون ارتباطی با هم ندارند. تنها واسطه شما جدول creditDebt هستش بنابراین باید بین تمام join ها باشه( یعنی در هر join یه طرف قضیه باید جدول CreditDebt باشه).
موفق باشید.

mohamadlvs
سه شنبه 20 تیر 1391, 10:43 صبح
کد های Sql درست هستند چون از Query Designer خود sqlserver و با انتخاب جداول و فیلدهای اونها گرفتم
CustomerId دو جدول Sales ,CreditDebt با WholesalerID از جدول Wholesaler در ارتباطند

mohamadlvs
سه شنبه 20 تیر 1391, 10:44 صبح
اطلاعات بیشتر....

veniz2008
سه شنبه 20 تیر 1391, 11:01 صبح
از بین دو select ای که نوشتی، همونطور که گفتم select اول شما اشتباهه( شما میخوای بین دو جدولی join بزنی که ارتباطی ندارن، من این حرفو از روی دیاگرامی که گذاشتید میزنم) ولی select دوم یه دستور درست هستش، اگر میخواید جدول sales هم در گزارش بیاد ،باید این جدول رو با جدول CreditDebt الحاق کنی(join کنی)، بصورت زیر:

SELECT CreditDebt.SaleOrBuyID, Wholesaler.WholesalerName, CreditDebt.GoldWhigtDebtor, CreditDebt.ChequeNumber, CreditDebt.ChequeDate, Bank.Name
FROM CreditDebt INNER JOIN
Wholesaler ON CreditDebt.CustomerID = Wholesaler.WholesalerID INNER JOIN Sales ON CreditDebt.CustomerID = Sales.CustomerID INNER JOIN
Bank ON CreditDebt.BankID = Bank.BankID

mohamadlvs
سه شنبه 20 تیر 1391, 11:17 صبح
اینم باز همون جواب تکراری رو میده
آیا باید ارتباطات رو هم درست کنم یعنی بینCreditDebt.CustomerID وSales.CustomerID ارتباط بذارم اینطوری که یک چند در چند میشه!

veniz2008
سه شنبه 20 تیر 1391, 11:50 صبح
بله customerID رو بین دو جدول باید ارتباط بدی.(کوئری که من نوشتم براساس ارتباط بین دو جدول هست).