ورود

View Full Version : استفاده از یک کوئری داینامیک در داخل کوئری دیگر



ihpled
چهارشنبه 17 بهمن 1397, 12:12 عصر
درود

من یک کوئری دارم که بدلیل استفاده از باکس های جستجو در هنگام اجرا ممکن است به هر حالتی تغییر کد بده و خروجیشو نشون بده

حالا من میخوام مثلا معدل یکی از ستون هاشو بدست بیارم

خب یک راهش انداختن حلقه حرکت روی اون و میانگین گرفتن هست که دارم استفاده میکنم؛ ولی برام سوال شده که آیا روشی هست که بشه توسط یک AdoQuery دیگه بیام کد SQLشو جوری بنویسم که از کوئری اول داخلش استفاده بشه؟


Q2.SQL.Text:='select avg(Q1.Score) as AV


؟

یوسف زالی
چهارشنبه 24 بهمن 1397, 14:09 عصر
سلام
با استفاده از همون کوئری می تونید مقادیری رو که می خواهید بیرون بکشید (NextRecordSet) که یکمی برای کاری که لازم دارید، مناسب به نظر نمی رسه
می تونید کوئری شی اول رو بریزید تو کوئری شی دوم و کمی تغییرش بدید تا به کاری که می خواهید انجام دهید برسید:


Query1:
select A, B from TBL

Query2:
select sum(A) from
(
select A, B from TBL
) X

masoode
پنج شنبه 25 بهمن 1397, 10:24 صبح
این مثال را ببینید. احتمالا به دردتون بخوره.
اول در خود SQL یک متغیر رشته ای تعریف کنید و کوئری خودتون را بسازید. سپس با دستور EXECUTE sp_executesql @statement آن را اجرا کنید.
DECLARE @birthYear int = 1970
DECLARE @statement NVARCHAR(4000)

WHILE @birthYear <= 1971
BEGIN
SET @statement = '
SELECT JobTitle, Count(BusinessEntityID)
FROM HumanResources.Employee
WHERE Year(BirthDate) = ' + CAST(@birthYear as NVARCHAR) +
' GROUP BY JobTitle'

EXECUTE sp_executesql @statement
SET @birthYear = @birthYear + 1
END

این هم منبعش:
https://www.essentialsql.com/build-dynamic-sql-stored-procedure/