PDA

View Full Version : سوال: چطوری از متغیرم در sql استفاده کنم؟



Hamishebahar
جمعه 05 تیر 1388, 21:13 عصر
سلام خسته نباشید کد زیر رو نگاه کنید:


SELECT COUNT(ID) AS cc
FROM Tbl_Dmarket
GROUP BY ID
HAVING (cc = 1)

من میخوام از متغیر cc که تعریف شده استفاده کنم،چی کار کنم؟ ممنونم.

منصور بزرگمهر
جمعه 05 تیر 1388, 21:23 عصر
Declare @CountID char(50)

SELECT @CountID = COUNT(ID) AS cc
FROM Tbl_Dmarket
GROUP BY ID
HAVING (cc = 1)

Hamishebahar
جمعه 05 تیر 1388, 22:02 عصر
سلام دوست عزیز ممنونم ولی این کد کار نمیکنه خطا میده!

Id از نوع Int هست.
چی کار کنم؟

منصور بزرگمهر
جمعه 05 تیر 1388, 23:12 عصر
Declare @CountID int

SELECT @CountID = COUNT(C1)
FROM dbo.Table_1

print @CountID

فرض کن جدولی به نام Table_1 داریم

بعد در Qurey اولیه خود وقتی ما Count داریم چرا دوباره همان ستون را Group By کرده و بعد دوباره Having

Hamishebahar
شنبه 06 تیر 1388, 00:16 صبح
ممنونم.
من این Query که شما میگید رو توی Sql امتحان میکنم یه پیغام میده:

Query has executed successfully.

بعد اون فیلد هایی که باید نمایش بده رو نمایش نمیده.
ببینید من میخوام این کارو بکنم:
ما یک جدول داریم به نام Table1 و یک ستون داریم به نام ID و 10 تا سطر داریم که:

سطر 1 = 1;
سطر 2 = 1;
سطر 3 = 2;
سطر 4 = 3;
سطر 5 = 2;
سطر 6 = 1;
سطر 7 = 1;
سطر 8 = 3;
سطر 9 = 5;
سطر 10 = 4;

من میخوام اون سطری که بیشترین عدد رو داره Select کنم. که الان 1 از همه بیشتره پس 1 باید Select بشه.
کد زیر اگه کار کنه نمایش میده ولی نمیدونم چرا خطا میده:


SELECT id, COUNT(id) AS Expr1
FROM Table1
GROUP BY id
HAVING (Expr1 = MAX(Expr1))

ممنونم.

alirezavafi
شنبه 06 تیر 1388, 00:26 صبح
SELECT Top (1) id, COUNT(id) AS Expr1
FROM Table1
ORDER BY Max(Count(ID DESC))

alirezavafi
شنبه 06 تیر 1388, 00:27 صبح
ببخشید اشتباه تایپی شد ، صحیح آن :


SELECT Top (1) id, COUNT(id) AS Expr1
FROM Table1
ORDER BY Max(Count(ID ))
DESC

alirezavafi
شنبه 06 تیر 1388, 00:33 صبح
ببخشید اشتباه تایپی شد ، صحیح آن :


SELECT Top (1) id, COUNT(id) AS Expr1
FROM Table1
ORDER BY Max(Count(ID ))
DESC

Hamishebahar
شنبه 06 تیر 1388, 00:55 صبح
ممنونم ولی این کد ها همشون خطا دارن من همه این روش ها رو رفتم فقط همون کدی که در بالا گفتم رو باید یه خورده دستکاری بشه تا درست شه.

لطفاً قبل از اینکه بفرستین یه امتحان بکنین.

SQL EXRS 2005

Hamishebahar
شنبه 06 تیر 1388, 01:09 صبح
به این عکس نگاه کنید:
http://hamishebaharp30world.persiangig.com/Visual%20Basic%206/quary.JPG
الان تو جدولی که با Quary
Select شده دوتا فیلد داریم Expr1 , ID. من فقط اگه بتونم به Expr1 دسترسی داشته باشم تمومه.
الان بزرگترینش توی Expr1 عدد 6 هست من میخوام 6 رو Select کنم که اگه کد زیر کار میکرد درست میشد:


SELECT id, COUNT(id) AS Expr1
FROM Table1
GROUP BY id
HAVING (Expr1 = MAX(Expr1))

alirezavafi
شنبه 06 تیر 1388, 10:07 صبح
حق با شماست ببخشید کد صحیح چک شده :

SELECT TOP (1) id,
(SELECT COUNT(*) AS Expr1
FROM Table1
WHERE (id = tbl.id)) AS Expr1
FROM Table1 AS tbl
ORDER BY Expr1 DESC

منصور بزرگمهر
شنبه 06 تیر 1388, 16:58 عصر
دوست عزیز مثال بالا برای قسمت T-SQL است و نه برای ویوها (از تصاویر فهمیدم)، ولی خوشبختانه دستورات T-SQL در ویوها نیز کار می کند، و الان این را فهمیدم.

ابتدا در مورد T-SQL اندکی برایت توضیح می دهم، سپس جواب سئوالت را می دهم. (بنظر می رسد با این برنامه آشنا نیستی، چرا که با گذاشتن یک متغیر در پرسجو فوق تو به قسمت ویوها رفتی نه قسمت فوق - اگر با برنامه فوق آشنا نیستی که بسیار بد نیز می باشد، کتبی مانند آموزش گام به گام SQL Server 2000 انتشارات نص بسیار خوب و پایه را توضیح می دهد تا به مراحل بعد - این را هم بگویم که T-SQL برای برنامه نویسی پایگاه داده آمده است، و بسیار مهم می باشد)
و اما جواب تو، فرض کن ما یک جدول بنام Table_1 و یک ستون بنام C1 داریم که 10 سطر اطلاعات (عددی) در آن ذخیره شده است، از شانس ما یکی از سطر ها نیز عدد 10 می باشد، (من الان از دستورات SQL و عبارت Having چیزی یادم نمیآید، و لذا از پرسجوی تو نیز سر در نیاوردم، بنابراین یک مثال جدول بالا را می زنم، تو با تعمیم دادن مثال من خود جواب خود را پیدا خواهی کرد)
کد زیر را در قسمت متنی ویوها بنویس جواب خود را خواهی یافت؛

DECLARE @CountID int
SELECT @CountID = COUNT(C1)
FROM dbo.Table_1

go

SELECT c1
FROM dbo.Table_1

WHERE c1 = @countID

در مثال بالا یکبار پرسجو اجرا کردیم که count جدول ما را در متغیر @CountID ریخت ما ما آن پرسجو را با عبارت Go اجرا کردیم، سپس پرسجوی دومی کردیم که از متغیر ما جهت بدست اوردن اطلاعاتی در دستور Where از آن استفاده کردیم، تو می توانی این متغیر را در دستور Having خود استفاده کنی، (من نمی دانم) ولی بهر حال تو تعداد Count خود را که می خواستی در متغیر خود داری.
همانطور که گفتم خودم هم تا بحال نمی دانستم که می شود دستورات T-Sql را نیز در ویوها اجرا کرد.
و دوباره اگر T-SQL نمی دانی شاید 80% و شاید چه می دانم 99% SQL Server را نمی دانی. این برنامه را در
SQL Server 2000 در منو Tools\SQL Query Analyzer و دز SQL Sever 2005 گوشه سمت چپ صفحه مورد New Query می باشد.

alirezavafi
شنبه 06 تیر 1388, 23:38 عصر
تصویر ضمیمه شده مربوطه می تونه مربوط به query designer در sql management studio باشه
شاید مربوط به ساخت view نباشه