PDA

View Full Version : تعداد ستون بر اساس ستون ديگر



mahdioo12194
چهارشنبه 22 آبان 1392, 19:45 عصر
سلام يه جدول دارم داراي سه ستون idkala و idbarand و idstore حالا مي خوام تعداد مغازه هايي كه

تك برندي و دو برندي و سه برندي هستند رو جداكانه بدست بيارم ؟!!!! idkala هم مقدارش را داريم يعني

جايي كه idkala مشخص شده جه تعداد مغازه هايي تك برند و دو برند و سه برند يا بيشتر هستند؟!!!

Salah Sanjabian
چهارشنبه 22 آبان 1392, 21:53 عصر
سلام دوست عزیز نمونه داده ها و نتیجه ای رو که میخواین ازش داشته باشین رو بذارید تا دوستان بهتر بتونن راهنمایی کنن.

mahdioo12194
چهارشنبه 22 آبان 1392, 23:51 عصر
مثلا

idkala idbarand idstore
5 1 10
5 2 10
6 3 10
4 1 10
4 2 10
4 3 10




حالا مي خوام تعداد مغازه هايي كه از يك يا دو يا سه برند استفاده مي كنند تو idkala=10 بدست بيارم؟

golnaz_a
پنج شنبه 23 آبان 1392, 16:10 عصر
اگر منظورتون از اعدادی که زیر idbarand نوشتین تعداد برند هست جوابتون این Query میشه :

SELECT idbarand ,COUNT(idstore) AS CountStore FROM TableName WHERE idkala =10 GROUP BY idbarand

mahdioo12194
پنج شنبه 23 آبان 1392, 16:14 عصر
اگر منظورتون از اعدادی که زیر idbarand نوشتین تعداد برند هست جوابتون این Query میشه :

SELECT idbarand ,COUNT(idstore) AS CountStore FROM TableName WHERE idkala =10 GROUP BY idbarand

نه همان تور که مشخص است آدی برند است که کلید خارجیه جدول barand است که نام برند و ادی برند دارد(idbarand ) !!

golnaz_a
پنج شنبه 23 آبان 1392, 17:27 عصر
خب همین Query رو بنویسید تنها فرقش اینه که باید جدول barand با جدولی که idbarand توش داره join بشه و select از join این دو تا جدول زده بشه

mahdioo12194
پنج شنبه 23 آبان 1392, 18:01 عصر
نگاه کنید انگار متوجه سوال من نشدید یه بار دیگه واضح می گم الان idstore=5 داره از دو برند استفاده می کنه idstore=6 از یه برند و idstore=4 از سه برند استفاده می کنه !! پس مغازه تک برندی 1 دونه

داریم (تعداد مغازه هایی که از یه دونه برند استفاده می کنند نو ع برند هم اهمیت ندارد در idkala=10 ) و هم چنین دوبرندی 1 دونه و سه برندی هم یه دونه داریم !!!(البته دادهایی باید می آوردم که همشون یکی نشند)

حالا به نظر شما این query شما جواب سوال من است؟!! تست کنید متوجه می شوید!!!!

golnaz_a
پنج شنبه 23 آبان 1392, 18:17 عصر
الان متوجه شدم اینو تست کنید:

select BarandCount,count(BarandCount) as CountStore from(sELECT COUNT(idstore) AS BarandCount FROM test WHERE idkala =10 GROUP BY idstore)v group by BarandCount

mahdioo12194
پنج شنبه 23 آبان 1392, 18:52 عصر
ظاهرا کارکرد یه توضیح بده این barandcount همیشه 1 ,2 و3 است ؟!! بعد اینارو می خوام تفکیک کنم ؟یه کویری بزنم واسه تکبرندی ها یکی واسه دو برند یکی واسه سه یا بیشتر ....؟

چون جدا کدن این تو برنامه یکم مشکله؟!! تازه می خوام درصدی نشون بدم؟!!

mahdioo12194
پنج شنبه 23 آبان 1392, 19:04 عصر
در واقع می خوام سه برند به بالا تو یه دسته بیاد !!!! هر کدوم هم جدا بیاد؟!!!!

mahdioo12194
پنج شنبه 23 آبان 1392, 19:16 عصر
تقریبا مشکل رو حل کردم فقط تو سه برند به بالا می خوام sum countstore رو بدست بیارم اینجور می نویسم ارور میده!!




SELECT BarandCount, COUNT(BarandCount) AS CountStore, SUM(CountStore) AS Expr1
FROM (SELECT COUNT(idstore) AS BarandCount
FROM Table2
WHERE (idkala = 10)
GROUP BY idstore) AS v
WHERE (BarandCount >= 3)
GROUP BY BarandCount

mahdioo12194
پنج شنبه 23 آبان 1392, 19:30 عصر
اینجوری نوشتم درست شد !!


SELECT SUM(CountStore) AS Expr1
FROM (SELECT BarandCount, COUNT(BarandCount) AS CountStore
FROM (SELECT COUNT(idstore) AS BarandCount
FROM Table2
WHERE (idkala = 10)
GROUP BY idstore) AS v
WHERE (BarandCount >= 3)
GROUP BY BarandCount) AS derivedtbl_1

golnaz_a
پنج شنبه 23 آبان 1392, 19:59 عصر
brandcount در واقع همان چندبرندی بودن هست مثلا 3 نشون میده 3 برندی هست و countstore تعداد مغازه ها رو نشون میده.
نمی دونم چرا باید به تفکیک نشون بدید ولی در این صورت باید اینجوری بنویسید:

مثلا برای یک برندی:

select BarandCount,count(BarandCount) as CountStore from(sELECT COUNT(idstore) AS BarandCount FROM test WHERE idkala =10 GROUP BY idstore)v group by BarandCount having
count(BarandCount)=1

برای سه به بالا:

select BarandCount,count(BarandCount) as CountStore from(sELECT COUNT(idstore) AS BarandCount FROM test WHERE idkala =10 GROUP BY idstore)v group by BarandCount having count(BarandCount)>=3

mahdioo12194
پنج شنبه 23 آبان 1392, 22:18 عصر
الان متوجه شدم اینو تست کنید:

select BarandCount,count(BarandCount) as CountStore from(sELECT COUNT(idstore) AS BarandCount FROM test WHERE idkala =10 GROUP BY idstore)v group by BarandCount

یه مشکل دیگه است ستون idbarand می تونه null باشه !!! با این دستور به مشکل می خوریم!!!

golnaz_a
جمعه 24 آبان 1392, 12:15 عصر
چه مشکلی ؟ نباید مشکلی پیش بیاد!

mahdioo12194
جمعه 24 آبان 1392, 14:45 عصر
منظورم اینه بعضی کالا ها برند ندارند !! پس idbarand null مقدار می گیره با دستور شما میاد اون رو هم جزو تعداد میاره !!! در صورتی که نباید بیاره واسه همین من count(idbarand ) رو گرفتم و فعلا مشکلی

به وجود نیامده است!!!

Salah Sanjabian
شنبه 25 آبان 1392, 20:03 عصر
سلام . Not Null رو باید اضافه کنی

SELECT BarandCount,count(BarandCount) as CountStore
FROM(sELECT COUNT(idstore) AS BarandCount FROM @T WHERE idkala =10 AND idbarand IS NOT NULL GROUP BY idstore)v group by BarandCount having
count(BarandCount)=1