PDA

View Full Version : سوال: کمک برای ساختن این مدل گزارش



مرتضی حمزه ئی
پنج شنبه 28 بهمن 1395, 10:33 صبح
باسلام خدمت عزیزان
من یک گزارش طبق تصویر زیر میخوام بسازم از دوستان میخوام راهنمایی کنند گزارش از نوع cross-tab باید استفاده کنم ولی مشکلی که هست اینه که میخوام به ازای هر رسته مثلا مستقیم تولیدی تعداد مرد زیر 25 سال سن وتعداد زنها وهمینطور رنج 25-35 سال به تفکیک تعداد زن ومرد را بدست بیارم اطلاعات مربوط به پرسنل که فیلد سن هم داخل اون هست توی یک تیبل بنام personel هست ولی نمیدونم میشه مستقیم این گزارش را ساخت یا از جدولهای کمکی باید استفاده کنم ممنون میشم دوستان راهنمایی کنند چون چند تا گزارش با این فرمت ولی براساس مثلا تحصیلات پرسنل - شغل پرسنل -سابقه پرسنل دارم که یکسان است ممنون میشم کمک کنید

gilsoft
جمعه 29 بهمن 1395, 15:46 عصر
باسلام خدمت عزیزان
من یک گزارش طبق تصویر زیر میخوام بسازم از دوستان میخوام راهنمایی کنند گزارش از نوع cross-tab باید استفاده کنم ولی مشکلی که هست اینه که میخوام به ازای هر رسته مثلا مستقیم تولیدی تعداد مرد زیر 25 سال سن وتعداد زنها وهمینطور رنج 25-35 سال به تفکیک تعداد زن ومرد را بدست بیارم اطلاعات مربوط به پرسنل که فیلد سن هم داخل اون هست توی یک تیبل بنام personel هست ولی نمیدونم میشه مستقیم این گزارش را ساخت یا از جدولهای کمکی باید استفاده کنم ممنون میشم دوستان راهنمایی کنند چون چند تا گزارش با این فرمت ولی براساس مثلا تحصیلات پرسنل - شغل پرسنل -سابقه پرسنل دارم که یکسان است ممنون میشم کمک کنید

سلام دوست عزیز

اول اینکه من با ساختار طراحی جداول دیتابیس شما آشنا نیستم و همچنین نمی‌دانم که از چه گزارش‌سازی استفاده می‌کنید ( پیشنهاد من به شما استفاده از گزارس‌ساز Stimulsoft.Report است )

بنابراین پیشنهاد می‌کنم که با Viewها و Stored Procedureها کار کنید و نهایتا گزارش را از Viewها بسازید.

موفق باشید .....

مرتضی حمزه ئی
شنبه 30 بهمن 1395, 09:35 صبح
مرسی از جوابتون
من از Crystal report استفاده میکنم و یک تیبل personel دارم که سن افراد بنام age داخل اون هست وداخل اون هم یک فیلد بنام rasteh حالا با توجه به اطلاعات فوق select ای که بتونم واسه گزارشم استفاده کنم را بگید ممنون میشم

336699
شنبه 30 بهمن 1395, 14:15 عصر
سلام

یه نمونه از دیتابیس هم ضمیمه کنید تا بهتر بشه راهنمایی کرد.

مرتضی حمزه ئی
شنبه 30 بهمن 1395, 15:30 عصر
سلام دوست عزیز این هم ساختار تیبل
CREATE TABLE [dbo].[personel](
[per_no] [int] NOT NULL,
[name] [nvarchar](15) NULL,
[family] [nvarchar](20) NULL,
[id_no] [nvarchar](10) NULL,
[cod_meli] [varchar](10) NULL,
[fath_name] [nvarchar](15) NULL,
[birth_date] [char](10) NULL,
[isu_plc] [nvarchar](15) NULL,
[dep_no] [char](10) NULL,
[job_no] [int] NULL,
[job_amt] [int] NULL,
[job_group] [int] NULL,
[post_no] [int] NULL,
[degree_no] [int] NULL,
[course_no] [int] NULL,
[rasteh] [int] NULL,
,[age] [int] NULL]
[sex] [int] NULL]
) ON [PRIMARY]
---rasteh=1 مستقیم تولیدی
---rasteh=1 غیرمستقیم تولیدی
---rasteh=3 خدمات
---rasteh=3 مالی اداری
فیلد age هم مربوط به سن پرسنل است و sex=1 مرد وsex=2 زن است
ممنون میشم select ای که بشه این query را بسازه بگید

gilsoft
شنبه 30 بهمن 1395, 18:00 عصر
سلام مجدد

فعلا با این Query شروع کنیم .. ببینیم چه میشه :
SELECT rasteh, CASE When age <25 then 'Under 25'
When age between 25 and 35 then '25-35'
When age between 36 and 45 then '36-45'
When age between 46 and 55 then '46-55'
When age > 55 then 'More than 55'
END as [age_range]
, Count(1) as [count]
FROM personel
GROUP BY CASE
When age <25 then 'Under 25'
When age between 25 and 35 then '25-35'
When age between 36 and 45 then '36-45'
When age between 46 and 55 then '46-55'
When age > 55 then 'More than 55'
END , rasteh
ORDER BY rasteh, [age_range] ;



موفق باشید .....

مرتضی حمزه ئی
یک شنبه 01 اسفند 1395, 16:25 عصر
سلام بینهایت تشکر از جوابتون من هم به همین select شما جنسیتsex را هم اضافه کردم وجواب گرفتم فعلا select مهم بود که انجام شد ولی استاد محترم حالا سوال اینست که چطوری همه سطرها را درقالب یک سطر بیارم که مثلا مستقیم تولیدی مرد وزن زیر 5 سال بعد مرد 5تا10 سال وزن 5 تا 10 سال الی آخر در یک سطر باشد بینهایت ممنونم اگه این قسمت را هم کمک کنید بعنوان مثال خروجی برای یک رسته مستقیم تولیدی بصورت زیر است
کدرسته ازسن تاسن جنسیت تعداد
15 25-35 زن 4
15 25-35 مرد 118
15 36-45 مرد 282
15 46-55 مرد 59
15 More than 55 مرد 3
15 Under 25 زن 1
15 Under 25 مرد 5

gilsoft
یک شنبه 01 اسفند 1395, 21:41 عصر
سلام مجدد
اینم کدی که میخواستی:

SELECT CASE
When rasteh = 1 then 'مستقیم تولیدی'
When rasteh = 2 then 'غیر مستقیم تولیدی'
When rasteh = 3 then 'خدمات و پشتیبانی'
When rasteh = 4 then 'مالی - اداری'
When rasteh = 5 then 'بازرگانی'
When rasteh = 6 then 'سایر'
END As
[Rasteh]
, age1m --as [کمتر از 25 سال]
, age1f --as [کمتر از 25 سال]
, age2m --as [بین 25-35 سال]
, age2f --as [بین 25-35 سال]
, age3m --as [بین 36-45 سال]
, age3f --as [بین 36-45 سال]
, age4m --as [بین 46-55 سال]
, age4f --as [بین 46-55 سال]
, age5m --as [بالای 55 سال]
, age5f --as [بالای 55 سال]
FROM (
SELECT rasteh
, CASE
When (sex = 1 and age <25) then 'age1m'
When (sex = 2 and age <25) then 'age1f'
When (sex = 1 and age between 25 and 35) then 'age2m'
When (sex = 2 and age between 25 and 35) then 'age2f'
When (sex = 1 and age between 36 and 45) then 'age3m'
When (sex = 2 and age between 36 and 45) then 'age3f'
When (sex = 1 and age between 46 and 55) then 'age4m'
When (sex = 2 and age between 46 and 55) then 'age4f'
When (sex = 1 and age > 55) then 'age5m'
When (sex = 2 and age > 55) then 'age5f'
END as [age_range]
, Count(1) as [count]
FROM personel
GROUP BY CASE
When (sex = 1 and age <25) then 'age1m'
When (sex = 2 and age <25) then 'age1f'
When (sex = 1 and age between 25 and 35) then 'age2m'
When (sex = 2 and age between 25 and 35) then 'age2f'
When (sex = 1 and age between 36 and 45) then 'age3m'
When (sex = 2 and age between 36 and 45) then 'age3f'
When (sex = 1 and age between 46 and 55) then 'age4m'
When (sex = 2 and age between 46 and 55) then 'age4f'
When (sex = 1 and age > 55) then 'age5m'
When (sex = 2 and age > 55) then 'age5f'
END, rasteh,sex ) tblAge
PIVOT (max([count])
For [age_range] in ([age1m], [age1f], [age2m], [age2f], [age3m], [age3f], [age4m], [age4f], [age5m], [age5f])
) PvtAges;

موفق باشید .....

مرتضی حمزه ئی
دوشنبه 02 اسفند 1395, 15:17 عصر
سلام باتشکر مجدد از زحماتتون عزیزم دستورت را اجرا کردم فقط اشکالش اینه که فیلد رسته را مقدارش null است وتمام سطرها مقدارش null است خروجی بصورت زیر است
NULL NULL NULL NULL NULL 1 NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL 11 NULL 2 NULL
NULL NULL 1 20 8 22 6 26 6 2 2
NULL NULL NULL 8 3 22 3 21 1 NULL NULL
NULL NULL NULL 15 4 50 5 22 NULL 2 NULL
NULL 5 1 118 4 282 NULL 59 NULL 3 NULL
NULL NULL NULL 35 13 61 17 56 4 5 NULL
NULL NULL NULL 40 NULL 119 NULL 35 NULL 3 NULL
NULL NULL NULL 16 1 41 3 48 NULL 3 NULL
NULL 1 NULL 31 1 37 NULL 41 NULL 6 NULL
NULL NULL NULL 14 1 62 1 27 1 5 NULL
NULL NULL NULL 17 NULL 32 NULL 18 NULL NULL NULL

gilsoft
دوشنبه 02 اسفند 1395, 22:13 عصر
سلام باتشکر مجدد از زحماتتون عزیزم دستورت را اجرا کردم فقط اشکالش اینه که فیلد رسته را مقدارش null است وتمام سطرها مقدارش null است خروجی بصورت زیر است
NULL NULL NULL NULL NULL 1 NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL 11 NULL 2 NULL
NULL NULL 1 20 8 22 6 26 6 2 2
NULL NULL NULL 8 3 22 3 21 1 NULL NULL
NULL NULL NULL 15 4 50 5 22 NULL 2 NULL
NULL 5 1 118 4 282 NULL 59 NULL 3 NULL
NULL NULL NULL 35 13 61 17 56 4 5 NULL
NULL NULL NULL 40 NULL 119 NULL 35 NULL 3 NULL
NULL NULL NULL 16 1 41 3 48 NULL 3 NULL
NULL 1 NULL 31 1 37 NULL 41 NULL 6 NULL
NULL NULL NULL 14 1 62 1 27 1 5 NULL
NULL NULL NULL 17 NULL 32 NULL 18 NULL NULL NULL

سلام مجدد

چرا فیلد [رسته] مقدارش NULL هست ؟! :متفکر:

من چندین بار Test کردم ... درست جواب میده
PivotQuery.v2.0.sql (http://s1.picofile.com/d/8287110118/a1a79823-5fd7-46e2-b8c1-c219ecdd61de/PivotQuery_v2_0.sql)

http://s1.picofile.com/d/8287110118/a1a79823-5fd7-46e2-b8c1-c219ecdd61de/PivotQuery_v2_0.sql

مرتضی حمزه ئی
سه شنبه 03 اسفند 1395, 10:15 صبح
استاد شرمنده اشکال از من بودبینهایت ممنون از جوابتون و لطفتون ولی من دستور select را با توجه به محدوده کد رسته بصورت زیر نوشتم
SELECT CASE

When rasteh_no = 15 then 'مستقیم تولیدی'

When (rasteh_no = 21 or rasteh_no = 14 or rasteh_no = 16 or rasteh_no = 17) then 'غیر مستقیم تولیدی'

When (rasteh_no = 19 or rasteh_no = 22) then 'خدمات و پشتیبانی'

When (rasteh_no= 12 or rasteh_no = 13) then 'مالی - اداری'

When rasteh_no = 18 then 'بازرگانی'

When rasteh_no = 11 then 'سایر'

END As [Rasteh]

, age1m --as [کمتر از 25 سال]

, age1f --as [کمتر از 25 سال]

, age2m --as [بین 25-35 سال]

, age2f --as [بین 25-35 سال]

, age3m --as [بین 36-45 سال]

, age3f --as [بین 36-45 سال]

, age4m --as [بین 46-55 سال]

, age4f --as [بین 46-55 سال]

, age5m --as [بالای 55 سال]

, age5f --as [بالای 55 سال]

FROM (

SELECT rasteh_no

, CASE

When (sex = 1 and expr6 <25) then 'age1m'

When (sex = 2 and expr6 <25) then 'age1f'

When (sex = 1 and expr6 between 25 and 35) then 'age2m'

When (sex = 2 and expr6 between 25 and 35) then 'age2f'

When (sex = 1 and expr6 between 36 and 45) then 'age3m'

When (sex = 2 and expr6 between 36 and 45) then 'age3f'

When (sex = 1 and expr6 between 46 and 55) then 'age4m'

When (sex = 2 and expr6 between 46 and 55) then 'age4f'

When (sex = 1 and expr6 > 55) then 'age5m'

When (sex = 2 and expr6 > 55) then 'age5f'

END as [age_range]

, Count(1) as [count]

FROM vwpers1 where vaz=0 and per_no>550000

GROUP BY CASE

When (sex = 1 and expr6 <25) then 'age1m'

When (sex = 2 and expr6 <25) then 'age1f'

When (sex = 1 and expr6 between 25 and 35) then 'age2m'

When (sex = 2 and expr6 between 25 and 35) then 'age2f'

When (sex = 1 and expr6 between 36 and 45) then 'age3m'

When (sex = 2 and expr6 between 36 and 45) then 'age3f'

When (sex = 1 and expr6 between 46 and 55) then 'age4m'

When (sex = 2 and expr6 between 46 and 55) then 'age4f'

When (sex = 1 and expr6 > 55) then 'age5m'

When (sex = 2 and expr6 > 55) then 'age5f'

END, rasteh_no,sex ) tblAge

PIVOT (max([count])

For [age_range] in ([age1m], [age1f], [age2m], [age2f], [age3m], [age3f], [age4m], [age4f], [age5m], [age5f])

) PvtAges;
ولی مشکل اینه که در رسته هایی که کد تنها داره مثل مستقیم تولیدی با کد 15 یک رکورد میاره ودرست است ولی اونجایی که کدرسته مثل مالی اداری که میتونه کد 12 یا 13 باشه دوسطر میاره اونرا چکار کنم خروجی بصورت زیر است
ساير NULL NULL NULL NULL NULL NULL 11 NULL 2 NULL
مالي - اداري NULL 1 20 8 22 6 26 6 2 2
مالي - اداري NULL NULL 8 3 22 3 21 1 NULL NULL
غير مستقيم توليدي NULL NULL 15 4 50 5 22 NULL 2 NULL
مستقيم توليدي 5 1 118 4 282 NULL 59 NULL 3 NULL
غير مستقيم توليدي NULL NULL 35 13 61 17 56 4 5 NULL
غير مستقيم توليدي NULL NULL 40 NULL 119 NULL 35 NULL 3 NULL
بازرگاني NULL NULL 16 1 41 3 48 NULL 3 NULL
خدمات و پشتيباني 1 NULL 31 1 37 NULL 41 NULL 6 NULL
غير مستقيم توليدي NULL NULL 14 1 62 1 27 1 5 NULL

gilsoft
سه شنبه 03 اسفند 1395, 22:40 عصر
ولی مشکل اینه که در رسته هایی که کد تنها داره مثل مستقیم تولیدی با کد 15 یک رکورد میاره ودرست است ولی اونجایی که کدرسته مثل مالی اداری که میتونه کد 12 یا 13 باشه دوسطر میاره اونرا چکار کنم خروجی بصورت زیر است
ساير NULL NULL NULL NULL NULL NULL 11 NULL 2 NULL
مالي - اداري NULL 1 20 8 22 6 26 6 2 2
مالي - اداري NULL NULL 8 3 22 3 21 1 NULL NULL
غير مستقيم توليدي NULL NULL 15 4 50 5 22 NULL 2 NULL
مستقيم توليدي 5 1 118 4 282 NULL 59 NULL 3 NULL
غير مستقيم توليدي NULL NULL 35 13 61 17 56 4 5 NULL
غير مستقيم توليدي NULL NULL 40 NULL 119 NULL 35 NULL 3 NULL
بازرگاني NULL NULL 16 1 41 3 48 NULL 3 NULL
خدمات و پشتيباني 1 NULL 31 1 37 NULL 41 NULL 6 NULL
غير مستقيم توليدي NULL NULL 14 1 62 1 27 1 5 NULL

سلام مجدد

اینم ورژن 3 کوئری فوق:
/* Version 3.0 */


USE [TestDb]
GO


SELECT rasteh As [رسته]
, age1m As [(کمتر از 25 سال (مرد]
, age1f As [(کمتر از 25 سال (زن]
, age2m As [(بین 25-35 سال (مرد]
, age2f As [(بین 25-35 سال (زن]
, age3m As [(بین 36-45 سال (مرد]
, age3f As [(بین 36-45 سال (زن]
, age4m As [(بین 46-55 سال (مرد]
, age4f As [(بین 46-55 سال (زن]
, age5m As [(بالای 55 سال (مرد]
, age5f As [(بالای 55 سال (زن]
FROM (
SELECT CASE
When rasteh = 1 then 'مستقیم تولیدی'
When rasteh = 2 then 'غیر مستقیم تولیدی'
When rasteh = 3 then 'خدمات و پشتیبانی'
When rasteh = 12 then 'مالی - اداری'
When rasteh = 13 then 'مالی - اداری'
When rasteh = 5 then 'بازرگانی'
When rasteh = 6 then 'سایر'
END As [Rasteh]
, CASE
When (sex = 1 and age <25) then 'age1m'
When (sex = 2 and age <25) then 'age1f'
When (sex = 1 and age between 25 and 35) then 'age2m'
When (sex = 2 and age between 25 and 35) then 'age2f'
When (sex = 1 and age between 36 and 45) then 'age3m'
When (sex = 2 and age between 36 and 45) then 'age3f'
When (sex = 1 and age between 46 and 55) then 'age4m'
When (sex = 2 and age between 46 and 55) then 'age4f'
When (sex = 1 and age > 55) then 'age5m'
When (sex = 2 and age > 55) then 'age5f'
END As [age_range]
, Count(1) As [count]
FROM personel
GROUP BY CASE
When (sex = 1 and age <25) then 'age1m'
When (sex = 2 and age <25) then 'age1f'
When (sex = 1 and age between 25 and 35) then 'age2m'
When (sex = 2 and age between 25 and 35) then 'age2f'
When (sex = 1 and age between 36 and 45) then 'age3m'
When (sex = 2 and age between 36 and 45) then 'age3f'
When (sex = 1 and age between 46 and 55) then 'age4m'
When (sex = 2 and age between 46 and 55) then 'age4f'
When (sex = 1 and age > 55) then 'age5m'
When (sex = 2 and age > 55) then 'age5f'
END
, CASE
When rasteh = 1 then 'مستقیم تولیدی'
When rasteh = 2 then 'غیر مستقیم تولیدی'
When rasteh = 3 then 'خدمات و پشتیبانی'
When rasteh = 12 then 'مالی - اداری'
When rasteh = 13 then 'مالی - اداری'
When rasteh = 5 then 'بازرگانی'
When rasteh = 6 then 'سایر'
END
, sex ) tblAge
PIVOT (max([count])
For [age_range] in ([age1m], [age1f], [age2m], [age2f], [age3m], [age3f], [age4m], [age4f], [age5m], [age5f])
) PvtAges;

امیدوارم با این کوئری مشکل شما حل بشه ( البته اگه بازم سوالی داری بِپُرس .... مشکلی نیست :لبخندساده: )

موفق باشید .....

مرتضی حمزه ئی
چهارشنبه 04 اسفند 1395, 10:50 صبح
استاد بینهایت ممنون سپاسگزارم مشکلم حل شد ولی سوالم اینه که چرا با or که توی یک سطر چک میکنیم جواب نمیده وتکراری میده ممنون میشه جهت افزودن اطلاعات است وگرنه شما بینهایت لطف کردید ودر چند مرحله جواب دادید مرسی

gilsoft
چهارشنبه 04 اسفند 1395, 22:20 عصر
استاد بینهایت ممنون سپاسگزارم مشکلم حل شد ولی سوالم اینه که چرا با or که توی یک سطر چک میکنیم جواب نمیده وتکراری میده ممنون میشه جهت افزودن اطلاعات است وگرنه شما بینهایت لطف کردید ودر چند مرحله جواب دادید مرسی

سلام مجدد

لطفا کوئریِ ( کوئری‌ای را که در آن از عملگر OR استفاده کردی ) خودت رو بزار ببینیم مشکلش چیه :متفکر:

در ضمن ( خواهشاً ) برای تشکر کردن بجای اینکه پست بزنی .. از دگمه‌ی تشکر کردن استفاده کن .... :لبخندساده:

موفق باشید .....

مرتضی حمزه ئی
پنج شنبه 05 اسفند 1395, 13:52 عصر
استاد باز هم ممنون یک سوال دارم واسه قسمت دوم عکس که ترتیب برحسب میزان تحصیلات است فیلد مربوط به تحصیلات degree_no هست اگر degree_no=18 دکترا وdegree_no=17 فوق لیسانس وdegree_no=16 لیسانس هست حالا توی این گزارش میخواهیم ببینیم در سال 95 چند تا دکترا داریم همینطور سال 94 تا 89 همینطور تعداد فوق لیسانس ولیسانس در این محدوده سالها توی فایل personel که تمام اطلاعات داخل اون هست یک فیلد داریم بنام vaz که اگر vaz=0 باشه فعال است واگر vaz=1 بازنشسته ویک فیلد داریم بنام rel_date که تاریخ بازنشستگی داخلش هست حالا با توجه به آخرین پست شما من اصلاحات را انجام دادم ولی فقط سال 95 را مقادیر نشون میده لطف میکنید راهنمایی کنید که کجا مشکل داره
SELECT degree_no As [تحصیلات]

, expr61m As [سال 1395]

, expr61f As [سال 1394]

, expr62m As [سال 1393]

, expr62f As [سال 1392]

, expr63m As [سال 1391]

, expr63f As [سال 1390]

, expr64m As [سال 1389]

, expr64f As [سال 1388]

, expr65m As [سال 1387]

, expr65f As [سال 1386]

, expr65m As [سال 1385]

FROM (

SELECT CASE

When degree_no = 18 then 'دکتراومعادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no <14 then 'زیردیپلم'

END As [degree_no]

, CASE

When (vaz=0 ) then 'expr61m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1394')) then 'expr61m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1393')) then 'expr62m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1392')) then 'expr62f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1391')) then 'expr63m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1390')) then 'expr63f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1389')) then 'expr64m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1388')) then 'expr64f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1387')) then 'expr65m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1386')) then 'expr65f'



END As [expr6_range]

, Count(1) As [count]

FROM vwpers1 where vaz=0 and per_no>600000

GROUP BY CASE

When (vaz=0 ) then 'expr61m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1394')) then 'expr61m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1393')) then 'expr62m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1392')) then 'expr62f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1391')) then 'expr63m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1390')) then 'expr63f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1389')) then 'expr64m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1388')) then 'expr64f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1387')) then 'expr65m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1386')) then 'expr65f'


END

, CASE

When degree_no = 18 then 'دکتراومعادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no <14 then 'زیردیپلم'

END

, sex ) tblexpr6

PIVOT (max([count])

For [expr6_range] in ([expr61m], [expr61f], [expr62m], [expr62f], [expr63m], [expr63f], [expr64m], [expr64f], [expr65m], [expr65f])

) Pvtexpr6s;

gilsoft
جمعه 06 اسفند 1395, 19:23 عصر
استاد باز هم ممنون یک سوال دارم واسه قسمت دوم عکس که ترتیب برحسب میزان تحصیلات است فیلد مربوط به تحصیلات degree_no هست اگر degree_no=18 دکترا وdegree_no=17 فوق لیسانس وdegree_no=16 لیسانس هست حالا توی این گزارش میخواهیم ببینیم در سال 95 چند تا دکترا داریم همینطور سال 94 تا 89 همینطور تعداد فوق لیسانس ولیسانس در این محدوده سالها توی فایل personel که تمام اطلاعات داخل اون هست یک فیلد داریم بنام vaz که اگر vaz=0 باشه فعال است واگر vaz=1 بازنشسته ویک فیلد داریم بنام rel_date که تاریخ بازنشستگی داخلش هست حالا با توجه به آخرین پست شما من اصلاحات را انجام دادم ولی فقط سال 95 را مقادیر نشون میده لطف میکنید راهنمایی کنید که کجا مشکل داره
SELECT degree_no As [تحصیلات]

, expr61m As [سال 1395]

, expr61f As [سال 1394]

, expr62m As [سال 1393]

, expr62f As [سال 1392]

, expr63m As [سال 1391]

, expr63f As [سال 1390]

, expr64m As [سال 1389]

, expr64f As [سال 1388]

, expr65m As [سال 1387]

, expr65f As [سال 1386]

, expr65m As [سال 1385]

FROM (

SELECT CASE

When degree_no = 18 then 'دکتراومعادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no <14 then 'زیردیپلم'

END As [degree_no]

, CASE

When (vaz=0 ) then 'expr61m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1394')) then 'expr61m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1393')) then 'expr62m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1392')) then 'expr62f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1391')) then 'expr63m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1390')) then 'expr63f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1389')) then 'expr64m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1388')) then 'expr64f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1387')) then 'expr65m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1386')) then 'expr65f'



END As [expr6_range]

, Count(1) As [count]

FROM vwpers1 where vaz=0 and per_no>600000

GROUP BY CASE

When (vaz=0 ) then 'expr61m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1394')) then 'expr61m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1393')) then 'expr62m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1392')) then 'expr62f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1391')) then 'expr63m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1390')) then 'expr63f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1389')) then 'expr64m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1388')) then 'expr64f'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1387')) then 'expr65m'

When ( vaz=0 or ( vaz=1 and substring(rel_date ,1,4)>'1386')) then 'expr65f'


END

, CASE

When degree_no = 18 then 'دکتراومعادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no <14 then 'زیردیپلم'

END

, sex ) tblexpr6

PIVOT (max([count])

For [expr6_range] in ([expr61m], [expr61f], [expr62m], [expr62f], [expr63m], [expr63f], [expr64m], [expr64f], [expr65m], [expr65f])

) Pvtexpr6s;

سلام مجدد
اینم کوئری مورد نظر:

SELECT [Degree_no]
,Y86 As [1386]
,Y87 As [1387]
,Y88 As [1388]
,Y89 As [1389]
,Y90 As [1390]
,Y91 As [1391]
,Y92 As [1392]
,Y93 As [1393]
,Y94 As [1394]
,Y95 As [1395]
FROM (
SELECT
CASE
When degree_no = 18 then 'دکترا و معادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no < 14 then 'زیر دیپلم'
END As [Degree_no]
,CASE
When SubString(rel_date,1,4) = '1386' Then 'Y86'
When SubString(rel_date,1,4) = '1387' Then 'Y87'
When SubString(rel_date,1,4) = '1388' Then 'Y88'
When SubString(rel_date,1,4) = '1389' Then 'Y89'
When SubString(rel_date,1,4) = '1390' Then 'Y90'
When SubString(rel_date,1,4) = '1391' Then 'Y91'
When SubString(rel_date,1,4) = '1392' Then 'Y92'
When SubString(rel_date,1,4) = '1393' Then 'Y93'
When SubString(rel_date,1,4) = '1394' Then 'Y94'
When SubString(rel_date,1,4) = '1395' Then 'Y95'
END As [Years]
,Count(1) As [count]
FROM vwpers1 a
WHERE vaz=0 and per_no > 100
GROUP BY [degree_no], SubString (rel_date,1,4)
) Tbl1
PIVOT (Max([count])
For [Years] in ([Y86],[Y87],[Y88],[Y89],[Y90],[Y91],[Y92],[Y93],[Y94],[Y95])
) PVT




موفق باشید .....

مرتضی حمزه ئی
شنبه 07 اسفند 1395, 12:03 عصر
عزیز از اینکه حوصله بخرج میدی وزحمت جوابگویی میکشی بینهایت سپاسگزارم ولی دستوری که نوشتی تعداد افراد بازنشسته توی اون سال را نشون میده یعنی مثلا 10 نفر کارشناس توی سال 94 رفتند من میخوام اونهایی که تو سال 94 کارشناس بودن را داشته باشم اونهایی کسایی هستند که تاریخ rel_date='' یا (vaz=1 and substring(rel_date,1,4)>'1394') که من این ترکیب را مینویسم ولی جواب نمیده فقط سال اول 86 را درست جواب میده بقیه null هست لطف میکنید کمک کنید دستورم هم دستور زیر است دلیل اینکه واسه سال 95 شرط vaz=0 گذاشتم چون کسانی که فعال باشند vza=0 است وفقط این شرط را واسه سال 95 گذاشتم بازهم شما راهنمایی کنید که درست است یاخیر وجالبه که فقط سال 86 اعداد دقیق است یعنی کامل میاره ولی واسه سال 95 تعداد کسر شده های هریک از مقاطع تحصیلی را میاره
SELECT [Degree_no]

,Y86 As [1386]

,Y87 As [1387]

,Y88 As [1388]

,Y89 As [1389]

,Y90 As [1390]

,Y91 As [1391]

,Y92 As [1392]

,Y93 As [1393]

,Y94 As [1394]

,Y95 As [1395]

FROM (

SELECT

CASE

When degree_no = 18 then 'دکترا و معادل'

When degree_no = 17 then 'فوق لیسانس'

When degree_no = 16 then 'لیسانس'

When degree_no = 15 then 'فوق دیپلم'

When degree_no = 14 then 'دیپلم'

When degree_no < 14 then 'زیر دیپلم'

END As [Degree_no]

,CASE

When ((SubString(rel_date,1,4)='' ) or (vaz=1 and SubString(rel_date,1,4) > '1386')) Then 'Y86'

When ((SubString(rel_date,1,4)='' ) or (vaz=1 and SubString(rel_date,1,4) > '1387')) Then 'Y87'

When ((SubString(rel_date,1,4)='' ) or (vaz=1 and SubString(rel_date,1,4) > '1388')) Then 'Y88'

When ((SubString(rel_date,1,4)='' ) or (vaz=1 and SubString(rel_date,1,4) > '1389')) Then 'Y89'

When ((SubString(rel_date,1,4)='' ) or (vaz=1 and SubString(rel_date,1,4) > '1390')) Then 'Y90'

When ((SubString(rel_date,1,4)='' ) or (vaz=1 and SubString(rel_date,1,4) > '1391')) Then 'Y91'

When ((SubString(rel_date,1,4)='' ) or (vaz=1 and SubString(rel_date,1,4) > '1392')) Then 'Y92'

When ((SubString(rel_date,1,4)='' ) or (vaz=1 and SubString(rel_date,1,4) > '1393')) Then 'Y93'

When ((SubString(rel_date,1,4)='' ) or (vaz=1 and SubString(rel_date,1,4) > '1394')) Then 'Y94'

When vaz=0 Then 'Y95'

END As [Years]

,Count(1) As [count]

FROM vwpers1 a

WHERE vaz=0 and per_no > 100

GROUP BY [degree_no], SubString (rel_date,1,4),vaz

) Tbl1

PIVOT (Max([count])

For [Years] in ([Y86],[Y87],[Y88],[Y89],[Y90],[Y91],[Y92],[Y93],[Y94],[Y95])

) PVT

gilsoft
شنبه 07 اسفند 1395, 15:19 عصر
سلام مجدد

دوست عزیز تا غروب به من اجازه بده ( که من یه کم تمرکزکنم :متفکر: ) .. اونم برای شما حل می‌کنم ....

منتظر باشید .....

gilsoft
یک شنبه 08 اسفند 1395, 00:26 صبح
سلام مجدد

شما اول بفرما که: هنگامیکه فیلد vaz برابر 0 باشه .. فیلد rel_date خالی است یا مقدار داره ؟ .. یعنی :



IF vaz = 0 THEN rel_date = ''
IF vaz = 1 THEN rel_date = '1395/01/01'

اگه همچین چیزی باشه .. کوئری شما درست اجرا نمیشه !! ( باید در صورت صفر بودن فیلد vaz .. فیلد rel_date هم مقدار داشته باشه ) :متعجب: چون SQL از کجا بفهمه که اونهایی که فعالند .. در چه سالی فعال هستند ؟! :متفکر:

بنابراین ما باید حداقل یک فیلد با مقدار Year در هر رکورد ( برای فعالین ) داشته باشیم .... :چشمک:

امیدوارم که درست توضیح داده باشم ... ( اگه نامفهوم بود .. جوری دیگر بحث رو ادامه میدیم ) :لبخندساده:

مرتضی حمزه ئی
سه شنبه 10 اسفند 1395, 11:34 صبح
سلام مجدد

شما اول بفرما که: هنگامیکه فیلد vaz برابر 0 باشه .. فیلد rel_date خالی است یا مقدار داره ؟ .. یعنی :



IF vaz = 0 THEN rel_date = ''
IF vaz = 1 THEN rel_date = '1395/01/01'

اگه همچین چیزی باشه .. کوئری شما درست اجرا نمیشه !! ( باید در صورت صفر بودن فیلد vaz .. فیلد rel_date هم مقدار داشته باشه ) :متعجب: چون SQL از کجا بفهمه که اونهایی که فعالند .. در چه سالی فعال هستند ؟! :متفکر:

بنابراین ما باید حداقل یک فیلد با مقدار Year در هر رکورد ( برای فعالین ) داشته باشیم .... :چشمک:

امیدوارم که درست توضیح داده باشم ... ( اگه نامفهوم بود .. جوری دیگر بحث رو ادامه میدیم ) :لبخندساده:

استاد مرسی از پیگیری وجوابتون
عزیز ما دوفیلد داریم یکی emp_date که تاریخ استخدام است ویکی rel_date که تاریخ کسر از آمار است اگر vaz=1 باشد پس rel_date<>'' است وتاریخ کسر از آمار داخل اون هست اگه vaz=0 پس rel_date='' هست
حالا واسه تعدادکارشناسان مثلا سال 91 باید ببینیم که rel_date='' و همچنین91=<(substring(emp_date,1,4 این یعنی کارشناس هست وکسراز آمار نیست وقطعا سال 91 جزو کارشناسان است حالا ممنون میشم کمک کنید سپاسگزارم چون query قبلی جواب نداد

gilsoft
چهارشنبه 11 اسفند 1395, 23:31 عصر
استاد مرسی از پیگیری وجوابتون
عزیز ما دوفیلد داریم یکی emp_date که تاریخ استخدام است ویکی rel_date که تاریخ کسر از آمار است اگر vaz=1 باشد پس rel_date<>'' است وتاریخ کسر از آمار داخل اون هست اگه vaz=0 پس rel_date='' هست
حالا واسه تعدادکارشناسان مثلا سال 91 باید ببینیم که rel_date='' و همچنین91=<(substring(emp_date,1,4 این یعنی کارشناس هست وکسراز آمار نیست وقطعا سال 91 جزو کارشناسان است حالا ممنون میشم کمک کنید سپاسگزارم چون query قبلی جواب نداد

سلام مجدد

اینم آخرین تغییرات کوئری:
SELECT
[Degree_no]
,Y86 As [1386]
,Y87 As [1387]
,Y88 As [1388]
,Y89 As [1389]
,Y90 As [1390]
,Y91 As [1391]
,Y92 As [1392]
,Y93 As [1393]
,Y94 As [1394]
,Y95 As [1395]
FROM (
SELECT
CASE
When degree_no = 18 then 'دکترا و معادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no < 14 then 'زیر دیپلم'
END As [Degree_no]
,CASE
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1386' Then 'Y86'
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1387' Then 'Y87'
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1388' Then 'Y88'
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1389' Then 'Y89'
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1390' Then 'Y90'
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1391' Then 'Y91'
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1392' Then 'Y92'
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1393' Then 'Y93'
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1394' Then 'Y94'
When ISNULL(emp_date, SubString(rel_date,1,4)) = '1395' Then 'Y95'
END As [Years]
,Count(1) As [count]
FROM vwpers1 a
WHERE vaz=1 OR vaz=0
GROUP BY [degree_no] , ISNULL(emp_date, SubString(rel_date,1,4))
) Tbl1
PIVOT (Max([count])
For [Years] in ([Y86], [Y87], [Y88], [Y89], [Y90], [Y91], [Y92], [Y93], [Y94], [Y95])
) PVT
امیدوارم با این کوئری مشکل شما برطرف بشه ( اما بازم سئوالی داشتی بپرس .. دوست من :لبخندساده: )

موفق باشید .....

مرتضی حمزه ئی
پنج شنبه 12 اسفند 1395, 22:49 عصر
استاد عزیز بینهایت تشکر ولی متاسفانه query آخری که نوشتی همه سطرها مقدار null برمیگردونه استاد emp_date تاریخ استخدام است واگر کسی کسرازآمار بشه یعنی vaz=1 میشه وrel_date<>'' و تاریخ استخدام هیچوقت null نیست وتمام افرادی که داخل فایل هستند emp_date آنها پراست من query شما را بصورت زیر اصلاح کردم ولی فقط سال 95 جواب دارد وتعداد درست است ولی سالهای قبل را مقدار null برمیگردونه ممنون میشه دوباره راهنمایی کنی من مبنا را براین اساس گذاشتم که مثلا در سال 91 یا باید vaz=0 باشد وتاریخ استخدام آن کوچکتر از 91 باشه یا اینکه کسر ازآمار شده یعنی vaz=1 و rel_date=91 ببخشید چون خودتون فرمودید اگه درست نشد مزاحمتون بشم مرسی
SELECT degree_no As [تحصیلات]

, expr61m As [سال 1395]

, expr61f As [سال 1394]

, expr62m As [سال 1393]

, expr62f As [سال 1392]

, expr63m As [سال 1391]

, expr63f As [سال 1390]

, expr64m As [سال 1389]

, expr64f As [سال 1388]

, expr65m As [سال 1387]

, expr65f As [سال 1386]

, expr65m As [سال 1385]

FROM (

SELECT CASE

When degree_no = 18 then 'دکتراومعادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no <14 then 'زیردیپلم'

END As [degree_no]

, CASE
When ( vaz=0 and substring(emp_date ,1,4)<='1395') then 'expr61m'

When (( vaz=1 and substring(rel_date ,1,4)='1394') or (vaz=0 and substring(emp_date ,1,4)<='1394')) then 'expr61m'

When ((vaz=1 and substring(rel_date ,1,4)='1393') or (vaz=0 and substring(emp_date ,1,4)<='1393')) then 'expr62m'

When ((vaz=1 and substring(rel_date ,1,4)='1392') or (vaz=0 and substring(emp_date ,1,4)<='1392')) then 'expr62f'

When ((vaz=1 and substring(rel_date ,1,4)='1391') or (vaz=0 and substring(emp_date ,1,4)<='1391')) then 'expr63m'

When ((vaz=1 and substring(rel_date ,1,4)='1390') or (vaz=0 and substring(emp_date ,1,4)<='1390')) then 'expr63f'

When ((vaz=1 and substring(rel_date ,1,4)='1389') or (vaz=0 and substring(emp_date ,1,4)<='1389')) then 'expr64m'

When ((vaz=1 and substring(rel_date ,1,4)='1388') or (vaz=0 and substring(emp_date ,1,4)<='1388')) then 'expr64f'

When ((vaz=1 and substring(rel_date ,1,4)='1387') or (vaz=0 and substring(emp_date ,1,4)<='1387')) then 'expr65m'

When ((vaz=1 and substring(rel_date ,1,4)='1386') or (vaz=0 and substring(emp_date ,1,4)<='1386')) then 'expr65f'



END As [expr6_range]

, Count(1) As [count]

FROM vwpers1 where vaz=0 and per_no>600000

GROUP BY CASE

When ( vaz=0 and substring(emp_date ,1,4)<='1395') then 'expr61m'

When (( vaz=1 and substring(rel_date ,1,4)='1394') or (vaz=0 and substring(emp_date ,1,4)<='1394')) then 'expr61m'

When ((vaz=1 and substring(rel_date ,1,4)='1393') or (vaz=0 and substring(emp_date ,1,4)<='1393')) then 'expr62m'

When ((vaz=1 and substring(rel_date ,1,4)='1392') or (vaz=0 and substring(emp_date ,1,4)<='1392')) then 'expr62f'

When ((vaz=1 and substring(rel_date ,1,4)='1391') or (vaz=0 and substring(emp_date ,1,4)<='1391')) then 'expr63m'

When ((vaz=1 and substring(rel_date ,1,4)='1390') or (vaz=0 and substring(emp_date ,1,4)<='1390')) then 'expr63f'

When ((vaz=1 and substring(rel_date ,1,4)='1389') or (vaz=0 and substring(emp_date ,1,4)<='1389')) then 'expr64m'

When ((vaz=1 and substring(rel_date ,1,4)='1388') or (vaz=0 and substring(emp_date ,1,4)<='1388')) then 'expr64f'

When ((vaz=1 and substring(rel_date ,1,4)='1387') or (vaz=0 and substring(emp_date ,1,4)<='1387')) then 'expr65m'

When ((vaz=1 and substring(rel_date ,1,4)='1386') or (vaz=0 and substring(emp_date ,1,4)<='1386')) then 'expr65f'

END

, CASE

When degree_no = 18 then 'دکتراومعادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no <14 then 'زیردیپلم'

END

, sex ) tblexpr6

PIVOT (max([count])

For [expr6_range] in ([expr61m], [expr61f], [expr62m], [expr62f], [expr63m], [expr63f], [expr64m], [expr64f], [expr65m], [expr65f])

) Pvtexpr6s;

gilsoft
جمعه 13 اسفند 1395, 00:24 صبح
سلام مجدد

دوست عزیز اگه برات امکان داره یه چندتا رکورد از جدول مورد نظر رو بصورت اکسل ( و یا بصورت Insert Query ) برام بزار .. تا من روی دیتای واقعی کار کنم ....

یکی از مشکلاتی که باعث طول کشیدن حل مسئله شده .. اینه که من به دیتای واقعی دسترسی ندارم ....

منتظرم ....

gilsoft
جمعه 13 اسفند 1395, 01:29 صبح
سلام مجدد
اینم کوئری جدید:




SELECT degree_no As [تحصیلات]
, y1395 As [سال 1395]
, y1394 As [سال 1394]
, y1393 As [سال 1393]
, y1392 As [سال 1392]
, y1391 As [سال 1391]
, y1390 As [سال 1390]
, y1389 As [سال 1389]
, y1388 As [سال 1388]
, y1387 As [سال 1387]
, y1386 As [سال 1386]
FROM (
SELECT CASE
When degree_no = 18 then 'دکتراومعادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no < 14 then 'زیردیپلم'
END As [Degree_no]
, CASE
When ((vaz=1 and substring(rel_date ,1,4)='1386') OR (vaz=0 and substring(emp_date ,1,4)<='1386')) then 'y1386'
When ((vaz=1 and substring(rel_date ,1,4)='1387') OR (vaz=0 and substring(emp_date ,1,4)<='1387')) then 'y1387'
When ((vaz=1 and substring(rel_date ,1,4)='1388') OR (vaz=0 and substring(emp_date ,1,4)<='1388')) then 'y1388'
When ((vaz=1 and substring(rel_date ,1,4)='1389') OR (vaz=0 and substring(emp_date ,1,4)<='1389')) then 'y1389'
When ((vaz=1 and substring(rel_date ,1,4)='1390') OR (vaz=0 and substring(emp_date ,1,4)<='1390')) then 'y1390'
When ((vaz=1 and substring(rel_date ,1,4)='1391') OR (vaz=0 and substring(emp_date ,1,4)<='1391')) then 'y1391'
When ((vaz=1 and substring(rel_date ,1,4)='1392') OR (vaz=0 and substring(emp_date ,1,4)<='1392')) then 'y1392'
When ((vaz=1 and substring(rel_date ,1,4)='1393') OR (vaz=0 and substring(emp_date ,1,4)<='1393')) then 'y1393'
When ((vaz=1 and substring(rel_date ,1,4)='1394') OR (vaz=0 and substring(emp_date ,1,4)<='1394')) then 'y1394'
When ( vaz=0 and substring(emp_date ,1,4)<='1395') then 'y1395'
END As [Years]
, Count(1) As [count]
FROM vwpers1 where per_no>100
GROUP BY CASE
When ((vaz=1 and substring(rel_date ,1,4)='1386') OR (vaz=0 and substring(emp_date ,1,4)<='1386')) then 'y1386'
When ((vaz=1 and substring(rel_date ,1,4)='1387') OR (vaz=0 and substring(emp_date ,1,4)<='1387')) then 'y1387'
When ((vaz=1 and substring(rel_date ,1,4)='1388') OR (vaz=0 and substring(emp_date ,1,4)<='1388')) then 'y1388'
When ((vaz=1 and substring(rel_date ,1,4)='1389') OR (vaz=0 and substring(emp_date ,1,4)<='1389')) then 'y1389'
When ((vaz=1 and substring(rel_date ,1,4)='1390') OR (vaz=0 and substring(emp_date ,1,4)<='1390')) then 'y1390'
When ((vaz=1 and substring(rel_date ,1,4)='1391') OR (vaz=0 and substring(emp_date ,1,4)<='1391')) then 'y1391'
When ((vaz=1 and substring(rel_date ,1,4)='1392') OR (vaz=0 and substring(emp_date ,1,4)<='1392')) then 'y1392'
When ((vaz=1 and substring(rel_date ,1,4)='1393') OR (vaz=0 and substring(emp_date ,1,4)<='1393')) then 'y1393'
When ((vaz=1 and substring(rel_date ,1,4)='1394') OR (vaz=0 and substring(emp_date ,1,4)<='1394')) then 'y1394'
When ( vaz=0 and substring(emp_date ,1,4)<='1395') then 'y1395'
END
, CASE
When degree_no = 18 then 'دکتراومعادل'
When degree_no = 17 then 'فوق لیسانس'
When degree_no = 16 then 'لیسانس'
When degree_no = 15 then 'فوق دیپلم'
When degree_no = 14 then 'دیپلم'
When degree_no < 14 then 'زیردیپلم'
END ) tblexpr6
PIVOT (max([count])
For [Years] in ([y1395], [y1394], [y1393], [y1392], [y1391], [y1390], [y1389], [y1388], [y1387], [y1386])
) PVT


موفق باشید .....

مرتضی حمزه ئی
جمعه 13 اسفند 1395, 14:23 عصر
استاد مرسی از جوابگویی وحوصله تون
query آخر جواب داره ولی جوابها درست نیست مثلا در سال 95 تعداد زیردیپلم 6 نشون میده ولی توی سال 94 تعداد 96 نفر است که درست نیست من با توجه به فرمایش شما از این فایل تمام رکوردهای اونرا پیوست میکنم ممنون میشم دوباره راهنمایی کنید بینهایت سپاسگزارم

gilsoft
شنبه 14 اسفند 1395, 00:26 صبح
سلام مجدد

لطفاً اعداد ( خروجیِ صحیح کوئری ) سال 1395 و یکی از سالهای گذشته رو به تفکیک مقاطع تحصیلی .. به من بدبد

منتظرم ...

مرتضی حمزه ئی
شنبه 14 اسفند 1395, 11:42 صبح
سلام باز هم ممنون
سال 95 :لیسانس=291 و فوق لیسانس=88وفوق دیپلم=231 ودیپلم=707 وزیر دیپلم=125
سال 94 :لیسانس=340 و فوق لیسانس=84وفوق دیپلم=230 ودیپلم=706 وزیر دیپلم=129
البته استاد عزیز با توجه به فایلی که قبلا پیوست کردم شاید تعداد چند تا با این آمار متفاوت باشه ولی حدودا در رنج آمار بالا است
بینهایت ممنون