PDA

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



shocraneh
چهارشنبه 02 آذر 1390, 07:11 صبح
با سلام وتشکر از دوستان برنامه نوییس

قبل از اینکه تو برنامه اجازه انجام عملیاتی رو به کاربر بدم می خام بررسی کنم که چک هایی که در سند مثلا شماره 2(Tbl_Transaction)معرفی شدند حتما فیلد State اونا true باشه که اگه این طور باشه اجازه داده میشه در غیر اینصورت نه

select id, Count(*) over() from
(select Num,id_check from Tbl_Transaction ) As A
inner join Tbl_check
on A.id_check=Tbl_check.id
where A.Num='2' and State=0
Group By id

با تشکر

حمیدرضاصادقیان
چهارشنبه 02 آذر 1390, 07:52 صبح
سلام.
نمیدونم درست متوجه شدم یانه.
ولی به نظرم خیلی پیچیده اش کردین.
با یک If میشه خیلی روانتر نوشت.
اینو تست کنید.

IF Not EXISTS(SELECT top 1 Num FROM Tbl_Transaction
WHERE STATE<>0 AND Num='2')

shocraneh
چهارشنبه 02 آذر 1390, 11:05 صبح
باتشکر از توجهتون . اجازه بدین منظورم رو بهتر بیان کنم
در جدول اولی شماره سند و چکهای مربوطه رو دارم(هر سند چند رکورد داره) Tbl_Transaction(num, ..., id_check)
اطلاعات (2,584) (2,598)(3,236)(9,589)
حالا تو جدول Tbl_check(id, ... ,state)
اطلاعات (598,0) (584,1)(236,1)(589,0)
کاری که باید انجام بشه

select Num,id_check from Tbl_Transaction نتیجه اش 584و598 است .حالا باید به سراغ جدول چک بره و چک کنه که چه تعدادشون از این لیست state =false دارند که درواقع چک های غیر معتبر میشن .در اینجا یک موردیعنی 598 است
پیشاپیش ممنونم
یه سوال دیگه هم داشتم . من بحث چالش هایی که تو اسکیوال مطرح کرده بودید رو خوندم راستش برام سنگین بود اگه امکان داره یه کتاب(الکترونیکی ) یا سایت در این خصوص معرفی کنید ممنونم

حمیدرضاصادقیان
چهارشنبه 02 آذر 1390, 11:37 صبح
ببینید بازم دقیق متوجه نشدم.
اگر تعداد چکهای نامعتبر رو میخواهید میتونید رو کد زیر Count بگیرید.
ولی اگر میخواهید ببینید چک نامعتبر هست یا خیر میتونید از کد زیر با استفاده از If Exists استفاده کنید.

SELECT A.id,B.Numid,B.Id_Check
FROM Tbl_check a
JOIN(
SELECT Num,id_check FROM
tbl_Transaction
WHERE Num='2' AND STATE=0) B
ON a.id=b.id_check