جلسه سیزدهم

دانلود

نظرات 3 + ارسال نظر
یلدا یکشنبه 2 مهر 1391 ساعت 12:02 ب.ظ

سلام
سوال درباره CTE
وقتی ما میخواهیم چند تا CTE در یک Query داشته باشیم:
فرض کنید که کد ما به صورت زیراست که CTE اولی نام همه شهر ها و تعداد شعبات آن را بر میگرداند و CTE دومی نام هرشخص و اینکه در هر شهر مجموعاً چند account دارد را بر میگرداند (هر کدام از select ها به درستی اجرا می شوند و مشکلی ندارند).
؟؟؟ اما وقتی میخواهم دستور select اصلی را بنویسم خطای زیر را می دهد و CTE اولی رو نمیشناسه من که هر کجاش سمی کالن گذاشتم درست نشد منظورش از فضای نام Xml رو هم نفهمیدم
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
اگه وقت ندارین اگه بتونید اون تمرین سر کلاس که 2 تا CTE داشت رو بزارید لطف کردید
use bank
go
with sumOFAssetCity(city,Tedad)
as
(
select city,count(assets)AS TedadAsseets
from dbo.Branch b
group by city
)

with nameAndCOuntOfAccount(id,name,city,sumOfCount)
AS
(
select d.customerid,c.name,b.city,count(d.accountId)AS sumOftedad
from dbo.Customer c
join dbo.Depositor d on c.id = d.customerid
join dbo.Account a on a.id = d.accountID
join dbo.Branch b on b.id =a.branchId
group by c.name,d.customerid,b.city
--having d.accountId distinct
)



select n.name
from nameAndCOuntOfAccount n
join sumOFAssetCity u on n.city=u.city
where n.sumOfCount=u.Tedad and u.city='Tehran' ;

ممنون

یلدا یکشنبه 2 مهر 1391 ساعت 04:36 ب.ظ

بازم سلام

اگه بخوایم همون کد بالا رو با استفاده روش Using Subqueries as Tables بنویسیم کار میکنه و مشکلی نداره

use bank
go

select n.name
from

(select d.customerid,c.name,b.city,count(d.accountId)AS sumOftedad
from dbo.Customer c
join dbo.Depositor d on c.id = d.customerid
join dbo.Account a on a.id = d.accountID
join dbo.Branch b on b.id =a.branchId
group by c.name,d.customerid,b.city) n

join

(select city,count(assets)AS TedadAsseets
from dbo.Branch b
group by city) u

on n.city=u.city

where n.sumOftedad=u.TedadAsseets and u.city='Tehran' ;

یلدا یکشنبه 2 مهر 1391 ساعت 04:37 ب.ظ

بازم سلام

اگه بخوایم همون کد بالا رو با استفاده روش Using Subqueries as Tables بنویسیم کار میکنه و مشکلی هم نداره

use bank
go

select n.name
from

(select d.customerid,c.name,b.city,count(d.accountId)AS sumOftedad
from dbo.Customer c
join dbo.Depositor d on c.id = d.customerid
join dbo.Account a on a.id = d.accountID
join dbo.Branch b on b.id =a.branchId
group by c.name,d.customerid,b.city) n

join

(select city,count(assets)AS TedadAsseets
from dbo.Branch b
group by city) u

on n.city=u.city

where n.sumOftedad=u.TedadAsseets and u.city='Tehran' ;

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد