PDA

View Full Version : نحوه ی کاربرد فیلد(مجازی) در اس کیو ال



فاطمه وطن دوست
شنبه 02 آبان 1388, 13:26 عصر
اگر دستوری مشابه زیر داشته باشیم و بخوایم فیلدی که به صورت مجازی در حین اجرای کوئری ایجاد می کنیم رو باز هم در دستور اس کیو ال استفاده کنیم و در بخش شرط بیاریم چطوری باید دستور اس کیو ال رو بنویسیم.






select A.id,A.name,A.t-count(*) as dift from (select * from E left join A on A.id=E.id) where dift>0 group by A.id,A.name,A.t")


الف . جداول A,E ادغام شدن.

ب . مقادیر ستون t از جدول A از کل تعداد رکوردها ی ( (*)count) جدول E که دارای کد مشترک (id) هستند کـــَسر شده.



-- منظورم قسمت Dift>0 هست.

AminSobati
یک شنبه 03 آبان 1388, 18:39 عصر
Query که در قسمت From نوشتین خاصیت Correlated داره، یعنی به Query بیرونی وابسته است. اگرچه دقیقا هدف Query شما رو نمیدونم اما حدس میزنم CROSS APPLY یا OUTER APPLY چیزی هست که دنبالشین

فاطمه وطن دوست
یک شنبه 03 آبان 1388, 20:59 عصر
Select * from (SELECT A.id, A.name, A.t - COUNT(E.id) AS difT FROM E RIGHT OUTER JOIN A ON E.id = A.id GROUP BY A.id, A.name, A.t) as sbquery Where difT >0





از subquery استفاده کردم.



در مورد CROSS APPLY یا OUTER APPLY میشه یه توضیح مختصر بدید ؟

محمد سلیم آبادی
یک شنبه 03 آبان 1388, 22:16 عصر
در مورد CROSS APPLY یا OUTER APPLY میشه یه توضیح مختصر بدید ؟


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

Inside Microsoft® SQL Server™ 2005 T-SQL Querying

محمد سلیم آبادی
یک شنبه 03 آبان 1388, 22:54 عصر
Query که در قسمت From نوشتین خاصیت Correlated داره، یعنی به Query بیرونی وابسته است. اگرچه دقیقا هدف Query شما رو نمیدونم اما حدس میزنم CROSS APPLY یا OUTER APPLY چیزی هست که دنبالشین

جداول مشتق شده (Derived Table) بر خلاف کوئری های Scalar و Multivalued نمی توانند Correlated باشند. آنها بایند Self-contained باشند. در ضمن در subquery (نه Query) که در ماده ی From نوشتنه است هیچ خاصیت Correlated وجود ندارد، دو جدول با همدیگر Join شدند.
مساله این است که می خواهد از نام Alias در Query استفاده کند که یکی از راههای Inline استفاده از Derived table است.


Select *
From
(
select D.id
,D.name
,t
,t-count(*)
from
(
select A.id, A.name, A.t
from E left join A
on A.id=E.id
) AS D (id, name, t)
) AS DT (id, name,t, dift)
where DT.dift>0
group by id,name,t

محمد سلیم آبادی
یک شنبه 03 آبان 1388, 23:11 عصر
از subquery استفاده کردم.


در حقیقت این چیزی که شما از آن استفاده کردین Subquery نیست بلکه یک نوع از table expression ها است.

عبارت های جداولی از به دو نوع کلی تقسیم می شوند:
1.DML
2.DDL

نوع اول شامل Derived table و Common Table Expression است.
و نوع دوم شامل UDF و View است.

چیزی که شما استفاده کردین Derived Table است.