araz_pashazadeh
یک شنبه 23 مهر 1391, 10:30 صبح
با عرض سلام و خسته نباشید خدمت شما.
من در پرس و جوی که می خوام بنویسم از common table expression استفاده کردم می خواستم بدونم امکان داره common table expression را بصورت تودرتو تعریف کرد؟
اگه شدنی چطوری؟
من خیلی جستجو کردم ولی به نتیجه نرسیدم.
اینم یه نمونه کد که خودم نوشتم ولی 3 تا خطا داره نتونستم درست کنم.
WITH
y AS (
WITH x AS (
SELECT 1 as n
)
SELECT * FROM x
)
SELECT
* FROM Y
ممنون میشم من را راهنمایی کنین.
Reza_Yarahmadi
یک شنبه 23 مهر 1391, 14:04 عصر
منظور شما از تودرتو چیه؟
خروجی مورد انتظار کدی که نوشتید چیه؟
یکی از حالتهای متداول استفاده از CTE بصورت زیر:
With Y as(Select * From Tbl_1 ...)
, X as (Select * From Y ...)
Select * From X INNER JOIN Y ON ...
araz_pashazadeh
دوشنبه 24 مهر 1391, 09:17 صبح
دوست عزیز من پرس و جوی را که نوشتم کامل در اختیار شما قرار می دهم:
CREATE
TABLE #T([RowNumber] [numeric](18, 0)IDENTITY(1,1)NOTNULL,
[BuyerNameFamily] [nvarchar]
(64)NULL,
[Date] [nvarchar]
(16)NULL,
[Description] [nvarchar]
(MAX),
[Price] [numeric]
(18, 0)NULL,
[Statuse] [nvarchar]
(16)NULL);
WITH
CTE(BuyerNameFamily,Date,Description, Price, Statuse)
AS (SELECT BuyerNameFamily,Date,Description, Price, Statuse
FROM (SELECT TBLBuyer.BuyerNameFamily, TBLAccountBuyer.DateRegister ASDate,
' 'ASDescription,
CASEWHEN CreditorOrDebtor = 0 THEN-TBLAccountBuyer.PreviousRemainder WHEN CreditorOrDebtor
= 1 THEN TBLAccountBuyer.PreviousRemainder ENDAS Price,
' 'AS Statuse
FROM TBLAccountBuyer INNERJOIN
TBLBuyer
ON TBLAccountBuyer.BuyerId = TBLBuyer.BuyerID
WHERE (TBLAccountBuyer.BuyerId ='1')
UNIONALL
SELECT TBLBuyer.BuyerNameFamily, TBLInvoiceSale.SaleDate ASDate,
TBLInvoiceSale
.Description,
SUM(TBLInvoiceDescriptionSale.SalePrice * TBLInvoiceDescriptionSale.Count)
-ISNULL(TBLInvoiceSale.Discount, 0)+ISNULL(TBLInvoiceSale.Freight, 0)AS Price,
' 'AS Statuse
FROM TBLInvoiceSale INNERJOIN
TBLInvoiceDescriptionSale
ON
TBLInvoiceSale
.InvoiceID = TBLInvoiceDescriptionSale.InvoiceId INNERJOIN
TBLBuyer
ON TBLInvoiceSale.BuyerId = TBLBuyer.BuyerID
WHERE (TBLInvoiceSale.BuyerId ='1')AND(TBLInvoiceSale.InvoicePre = 0)
GROUPBY TBLInvoiceSale.Discount, TBLInvoiceSale.Freight, TBLBuyer.BuyerNameFamily,
TBLInvoiceSale
.SaleDate, TBLInvoiceSale.Description
UNIONALL
SELECT BuyerNameFamily,Date,Description,-Payment AS Price,' 'AS Statuse
FROM ViewReceipt
WHERE (BuyerID ='1')
UNIONALL
SELECT TBLBuyer.BuyerNameFamily, TBLReceiveDocument.Maturity, TBLReceiveDocument.Description,-TBLReceiveDocument.Payment AS Payment,
CASEWHENStatus= 0 THEN' 'WHENStatus= 1 THEN''WHENStatus= 2 THEN' 'ENDAS Statuse
FROM TBLReceiveDocument INNERJOIN
TBLBuyer
ON TBLReceiveDocument.BuyerId = TBLBuyer.BuyerID
WHERE (TBLReceiveDocument.BuyerId ='1'))AS Result)
INSERT #T(BuyerNameFamily,Date,Description, Price, Statuse)
SELECT BuyerNameFamily,Date,Description, Price, Statuse
FROM CTE
ORDERBYDate
SELECT RowNumber,BuyerNameFamily,Date,Description,ABS( Price)AS Price,ABS((SELECTSUM(Price)AS Totale
FROM #T AS CTETemp
WHERE (CTETemp.RowNumber <= #T.RowNumber)AND Statuse <>''))AS Totale, Statuse
FROM #T
DROPTABLE #T
من این کار را برای بهینه کردن پرس وجو می خوام انجام بدم.
اگه شما پیشنهادی در این مورد دارین ممنون میشم بگین.
tooraj_azizi_1035
جمعه 28 مهر 1391, 12:44 عصر
... و بیشتر:
http://www.farsimsdn.somee.com/default.aspx?id=48
s3unit
دوشنبه 01 آبان 1391, 09:32 صبح
سلام
شما میتونید از چندتا as که با cama از هم دیگه جدا میشند استفاده کنید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.