ورود

View Full Version : مشکل در خروجی داده ها خاص در دیتابیس sql



hamidrezax1
سه شنبه 21 دی 1400, 17:29 عصر
با سلام خدمت همه عزیزان همانطوری که مشاهده میکنید ما برای مشتری های خود 4 وضعیت رو شامل شدیم وضعیت ارسال نشده ،وضعیت ارسال شده ، وضعیت دریافت شده و نهایتاً وضعیت از لیست خارج شده حالا چیزی که ما در دیتابیس sql خودمون داریم جدول سمت راست هستش و چیزی که ما در نهایت میخوایم جدول سمت چپ که نتیجه نهایی است ، شروطی که باید رعایت بشه شامل تاریخ های بزرگتر 1400/01/02 و همچنین جنسیت مرد و عدم نمایش از لیست خارج شده ها در نتیجه نهایی می باشد.ممنون میشم راهنمایی بفرمایید

153657


البته گفته باشم کد زیر رو نوشتم اما جواب نمیده



SELECT status.nam AS نام, status.nam_fa AS [نام خانوادگی], status.naumber AS [شماره قبض], COUNT(status_1.status) AS [ارسال نشده], COUNT(status_2.status) AS [ارسال شده]
FROM status INNER JOIN
status AS status_1 ON status.id = status_1.id INNER JOIN
status AS status_2 ON status.id = status_2.id
WHERE (status.mz <> N'زن') AND (status.datee > N'1400/01/02')
GROUP BY status.nam, status.nam_fa, status.naumber
HAVING (COUNT(status_1.status) = 0) or (COUNT(status_2.status) = 1)

mazoolagh
چهارشنبه 22 دی 1400, 08:13 صبح
سلام و روز خوش

1- ظاهرا یک مسئله pivoting ساده است:

select * from
(select id , nam , nam_fa , naumber, stat
from status
where stat in (0,1) and datee > '1400/01/02' and mz='mard'
) as input
pivot (count(id) for stat in ([0],[1])) as output



و برای اسم ستونها:
select nam , nam_fa , naumber,
isnull([0],0) as [ارسال نشده],
isnull([1],0) as [ارسال شده]
from
(select id , nam , nam_fa , naumber , stat
from status
where stat in (0,1) and datee > '1400/01/02' and mz='mard'
) as input
pivot (count(id) for stat in ([0],[1])) as output

mazoolagh
چهارشنبه 22 دی 1400, 08:19 صبح
2- این روش رو هم تست کنین و خبر بدین:

select nam , nam_fa , naumber
, count(case when stat=0 then 1 end) as 'ارسال نشده'
, count(case when stat=1 then 1 end) as 'ارسال شده'
from status
where stat in (0,1) and datee >'1400/01/02' and mz='mard'

mazoolagh
چهارشنبه 22 دی 1400, 08:31 صبح
3- طراحی جدول اشکال داره:

مشخصات مشتریان باید در یک جدول دیگه باشه و اینجا فقط باید customer_id نگهداری بشه، هر جا نیاز به مشخصات باشه کافی هست به جدول مشتریان join کنین.
فیلد تاریخ باید به صورت integer ذخیره بشه و نه varchar ؛ به این ترتیب عملیات مقایسه خیلی سریع انجام میشه. هر جا برای نمایش لازم باشه کافی هست اون رو format کنین.
فیلدهایی مثل جنسیت که مقادیر کاملا محدود و مشخصی میگیرن باید بصورت tinyint ذخیره بشن؛ در اینجا که فقط دو حالت داریم bit هم میشه استفاده کرد.

hamidrezax1
چهارشنبه 22 دی 1400, 15:32 عصر
سلام وقت بخیر دوست عزیز.ممنون از راهنمایتون.خیلی لطف کردید،کارم با
pivot راه افتاد.بازمم ممنون که وقت گذاشتین و راهنمایی کردید.موفق و پیروز باشید