PDA

View Full Version : کوئری گزارش گیری



baran.f.a
سه شنبه 09 دی 1393, 21:22 عصر
سوال من یه کوئری دارم که می خوام تعداد دستگاه های ابطالی، تعمیری و خام را اساس نام بانک(psp_id) بشمرم این داده ها در 2 جدول قرار داره کوئریمو تو قسمت زیر آوردم .

select psp_id , Raw , Cancell , repair
from(
select pos.psp_id ,COUNT( pos.serial_code) as `Raw`
from pos
where pos.status='خام'
group by pos.psp_id

UNION

select pos.psp_id ,COUNT( pos.serial_code) as `Cancell`
from pos
INNER JOIN change_location
on change_location.serial_code = pos.serial_code
where change_location.status='ابطالی'
and
change_location.update_date > pos.update
group by pos.psp_id

UNION

select pos.psp_id,COUNT(pos.serial_code) AS `repair`
from pos
INNER JOIN change_location
on change_location.serial_code = pos.serial_code
where change_location.status='تعمیری'
and
change_location.update_date > pos.update
group by pos.psp_id
) t

group by psp_id "


هر کدام از select های داخلی جداگانه کار می کنند اما وقتی می خوام نتیجه آن ها را باهم ببینم خطاهای عجیب می ده لطفا راهنماییم کنید کجای کوئریم اشتباه .

baran.f.a
چهارشنبه 10 دی 1393, 08:45 صبح
کسی نیست راهنماییم کنه .

beh3000
چهارشنبه 10 دی 1393, 09:16 صبح
در union نام ستون های برگشتی باید یکی باشد ... یعنی اینکه توی select اول ستون raw داری ولی توی select دوم cancel گذاشتی باید همه یک نام داشته باشه

از کوئری تون مشخصه که میخواید توی یک رکورد اونها رو نمایش بدید درسته ؟ چرا اصلا از union استفاده کردید ؟

online_com
چهارشنبه 10 دی 1393, 09:20 صبح
کسی نیست راهنماییم کنه .
اولين مشكلي كه بدون تحليل به چشم مي خوره اين كه شما 4 تا فيلد انتخاب كرديد در حالي كه كوئري هاي داخلي دو تا فيلد خروجي دارند براي اصلاح اين مورد خط اول هر كدوم از سلكت هاي داخلي رو به صورت زير اصلاح كنيد


select pos.psp_id ,COUNT( pos.serial_code) as `Raw`,0 as `Cancell`,0 AS `repair`
select pos.psp_id ,0 as `Raw`,COUNT( pos.serial_code) as `Cancell`,0 AS `repair`
select pos.psp_id,0 as `Raw`,0as `Cancell`,COUNT(pos.serial_code) AS `repair`


گذاشتن پيغام خطا به راهنمايي بيشتر كمك مي كند

baran.f.a
چهارشنبه 10 دی 1393, 09:28 صبح
سلام ممنون ولی من این تغییر را انجام دادم ولی خطای Duplicate column name '0' را می ده باید چیکار کنم

baran.f.a
چهارشنبه 10 دی 1393, 09:34 صبح
در union نام ستون های برگشتی باید یکی باشد ... یعنی اینکه توی select اول ستون raw داری ولی توی select دوم cancel گذاشتی باید همه یک نام داشته باشه

از کوئری تون مشخصه که میخواید توی یک رکورد اونها رو نمایش بدید درسته ؟ چرا اصلا از union استفاده کردید ؟

سلام دقیقا می خوام همین کار و انجام بدم باید از چه روشی استفاده کنم راستش من تازه کارم .

online_com
چهارشنبه 10 دی 1393, 09:37 صبح
سلام ممنون ولی من این تغییر را انجام دادم ولی خطای Duplicate column name '0' را می ده باید چیکار کنم

احتمالا قسمت هاي as'نام فيلد' نگذاشته اي دقيقا طبق نمونه اي كه گفتم اصلاح كرده ايد

baran.f.a
چهارشنبه 10 دی 1393, 09:41 صبح
احتمالا قسمت هاي as'نام فيلد' نگذاشته اي دقيقا طبق نمونه اي كه گفتم اصلاح كرده ايد

درست شد خیلی ممنون .

baran.f.a
چهارشنبه 10 دی 1393, 10:13 صبح
ببخشید می خواستم بدونم استفاده از روش union اشتباهه ؟ چون الان که کوئریم اجرا شد شمارش درست دستگاه هایی که یک پروژه مشترک دارن را انجام نمی ده این به خاطر استفاده از union?