PDA

View Full Version : چسباندن چند SELECT به صورت عمودی ( کنار هم نه زیر هم )



forodo
دوشنبه 24 آذر 1393, 08:50 صبح
سلام
من 3تا سلکت می زنم و حالا می خوام نتایج به صورت عمودی در یک جدول قرار گیرد.
من می خوام کلاً تعداد ستونهای Ersal، Erjaa و Ekhtetam رو بر اساس نام کاربری دریافت کنم. یعنی مثلاً کاربر شماره 5 3بار Ersal انجام داده و ...
این جدولم هستش:
http://8pic.ir/images/gmdwkbp1ea11ny693947.png

این کوئری هستش که روی جدول بالا می زنم:
SELECT Username, COUNT(Ersal) AS Ersal
FROM tblVaziateMokatebat
WHERE Ersal = 1 AND UnitID = (SELECT UnitID
FROM tblPersonal
WHERE Username = 1)
GROUP BY Username
///////////////////////////////////////////////////////////////////////
SELECT Username, COUNT(Erjaa) AS Erjaa
FROM tblVaziateMokatebat
WHERE Erjaa = 1 AND UnitID = (SELECT UnitID
FROM tblPersonal
WHERE Username = 1)
GROUP BY Username
///////////////////////////////////////////////////////////////////////
SELECT Username, COUNT(Ekhtetam) AS Ekhtetam
FROM tblVaziateMokatebat
WHERE Ekhtetam = 1 AND UnitID = (SELECT UnitID
FROM tblPersonal
WHERE Username = 1)
GROUP BY Username
و این هم نتیچه کوئری بالا:
http://8pic.ir/images/tis28wj0ksowo68snndw.png

من می خوام این نتیجه برای من برگرده:
http://8pic.ir/images/12qtmfxt38lmu2yky3op.png

مرتضی تقدمی
دوشنبه 24 آذر 1393, 09:12 صبح
سلام
تست كنيد:

select username, SUM(ersal), SUM(erjaa), SUM(estekhdam) from tbl_erjaa
group by username

forodo
دوشنبه 24 آذر 1393, 09:25 صبح
یکیش هم کار نمی کنه:
SELECT Username, SUM(Ersal) AS Ersal
FROM tblVaziateMokatebat
WHERE UnitID = (SELECT UnitID
FROM tblPersonal
WHERE Username = 1)
GROUP BY Username
اروره زیر رو می ده:

Msg 8117, Level 16, State 1, Line 1
Operand data type bit is invalid for sum operator.

مرتضی تقدمی
دوشنبه 24 آذر 1393, 09:39 صبح
یکیش هم کار نمی کنه:
SELECT Username, SUM(Ersal) AS Ersal
FROM tblVaziateMokatebat
WHERE UnitID = (SELECT UnitID
FROM tblPersonal
WHERE Username = 1)
GROUP BY Username
اروره زیر رو می ده:

Msg 8117, Level 16, State 1, Line 1
Operand data type bit is invalid for sum operator.

شما كد من رو تست كرديد؟! دقيقا خروجي مورد نظر شما رو ميده.

forodo
دوشنبه 24 آذر 1393, 09:53 صبح
آره نوکرترم. تستیدم:
select Username, SUM(Ersal), SUM(Erjaa), SUM(Ekhtetam) from tblVaziateMokatebat
group by Username
همون اروری که گفتم رو دادش.

مرتضی تقدمی
دوشنبه 24 آذر 1393, 10:05 صبح
چون نوع فيلد شما bit هستش اين خطا رو ميده. من با فرض int بودن فيلد اين كد رو نوشتم. با اين شرايط اين كد به اين شكل كار نميكنه.
من كد جديد رو براتون ميزارم.

forodo
دوشنبه 24 آذر 1393, 10:15 صبح
می دونم میشه کنار هم نتایج رو چید.
ولی هرچی می گردم پیداش نمی کنم.

مرتضی تقدمی
دوشنبه 24 آذر 1393, 10:23 صبح
اينو تست كنيد:


SELECT Username, (select COUNT(ersal) from tbl_erjaa where username=a.username and ersal=1) as ersal,
(select COUNT(erjaa) from tbl_erjaa where username=a.username and erjaa=1) as erjaa,
(select COUNT(estekhdam) from tbl_erjaa where username=a.username and estekhdam=1) as estekhdam
FROM tbl_erjaa a
WHERE UnitID = (SELECT UnitID
FROM tblPersonal
WHERE Username = 1)
GROUP BY Username