PDA

View Full Version : بهینه سازی کد برای خروجی موردنظر



shocraneh
یک شنبه 21 اسفند 1390, 13:15 عصر
با سلام .یک جدول دارم که عملیات روی چند موجودیت رادر آن ذخیره میکنم
کدموجودیت ، عملیات، توسط چه کسی
1 ، a ، رضا
1 b علی
1 c حامد
2 a مجید
2 b علی
3 a رضا

خروجی مورد نظر من اینه( نام افراد به تفکیک عملیات و تعداد عملیات مد نظراست)
نام افراد ، a ، b ، c
رضا ، 0 ، 0، 2
علی 0 2 0
حامد 1 0 0 والی آخر
این عملیات ده مورد است .من برای پیاده سازی مجبور شدم از ده ویو استفاده کنم که اصلا بهینه نیست.لطفا دوستان کمک کنند

nedata
یک شنبه 21 اسفند 1390, 13:38 عصر
SELECT pname,(CASE WHEN act='a' THEN Count(*) ELSE 0 END) AS a
,(CASE WHEN act='b' THEN Count(*) ELSE 0 END) AS b
,(CASE WHEN act='c' THEN Count(*) ELSE 0 END) AS c
FROM tablename
GROUP BY pname,act

shocraneh
یک شنبه 21 اسفند 1390, 22:19 عصر
با تشکر از شما دوست عزیز .فقط یه ایرادی داره .درحالت زیر
کدموجودیت ، عملیات، توسط چه کسی
1 ، a ، رضا
1 b علی
1 c رضا
2 b علی
خروجی مورد نظر من
رضا 1 ،0 ، 1
علی 0،2،0
اما کد شما مثلا علی رو تو دو سطر میاره ؟؟؟؟برای رفع مشکل چی کار باید کرد ممنون

nedata
یک شنبه 21 اسفند 1390, 23:13 عصر
SELECT pname, SUM(a) AS Expr1, SUM(b) AS Expr2, SUM(c) AS Expr3
FROM (SELECT pname, (CASE WHEN act = 'a' THEN COUNT(*) ELSE 0 END) AS a, (CASE WHEN act = 'b' THEN COUNT(*) ELSE 0 END) AS b,
(CASE WHEN act = 'c' THEN COUNT(*) ELSE 0 END) AS c
FROM tablename
GROUP BY pname, act) g
GROUP BY pname

shocraneh
دوشنبه 22 اسفند 1390, 08:17 صبح
ممنونم رفیق خیلی عالی بود .یه سوال دیگه هم دارم.اگه بخوام یه خروجی دیگه به این شکل بگیرم
کدموجودیت ، عملیاتa چه کسی ، عملیاتb چه کسی، عملیاتc چه کسی
1 ، رضا ، علی ،رضا
2 ، ، علی،،
اینجا برای تلفیق رکوردها با یک کد موجودیت چی کار باید کرد؟ پیشاپیش ممنونم

nedata
چهارشنبه 24 اسفند 1390, 08:30 صبح
من فكر ميكنم كاري كه ميخواهيد انجام بديد اشتباه است. چون اگر براي عمليات a ، 2 نفر باشد نميشه اين كار را كرد

shocraneh
چهارشنبه 24 اسفند 1390, 09:11 صبح
ممنون از توجهتون .من باید لیست تمام موجودیت ها به همراه نام افرادی که عملیات رو اون موجودیت انجام دادند رو بگیرم. دقیقا خروجی تاپیک 5.
البته من با ویو این خروجی رو گرفتم منتها چون تعداد عملیات رو سیستم من 10 تاست .مجبورشدم 10تا ویو داشته باشم که چیز جالبی نیست

nedata
چهارشنبه 24 اسفند 1390, 09:17 صبح
شما اين كار را بايد با گزارش حل كنيد.مثلا اگر از fast Report استفاده مي كنيد بايد از امكان group header آن استفاده كنيد

shocraneh
چهارشنبه 24 اسفند 1390, 17:57 عصر
درسته اصلا حواسم نبود من با سیمیول کارکردم ولی مشکل اینجاست که الان میخام گزارشات رو با ریپورت ویو خود دات نت انجام بدم و اطلاعاتم بامحیط Reportview کم است. راستش GroupHeader که نداره .با Group Column هم تلفیقش نمیکنه تو تالار گزارش ساز ها مطرحش میکنم. ممنون میشم اگه اطلاعات درید یه سری اونجا بزنید

shocraneh
شنبه 27 اسفند 1390, 23:02 عصر
باسلام رفیق نمیشه از گروهبندی استفاده کرد.گروه بندی ترتیب رو درست میکنه .رکوردهارو تلفیق نمی کنه .باید مشکل تو اسکیوال حل بشه.دوستان لطفا یه راه حل پیشنهادبدید.

nedata
دوشنبه 29 اسفند 1390, 00:09 صبح
سلام ، چرا ميشه ، اسمش گروه بندي پس به مرتب سازي كار نداره.
من ميدونم توي fast Report مثلا گروه بندي مي كنيم اول بر اساس كد موجوديت و بعد براساس عمل