1 ضمیمه
مشکل در خروجی داده ها خاص در دیتابیس sql
با سلام خدمت همه عزیزان همانطوری که مشاهده میکنید ما برای مشتری های خود 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)
نقل قول: مشکل در خروجی داده ها خاص در دیتابیس sql
سلام و روز خوش
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
نقل قول: مشکل در خروجی داده ها خاص در دیتابیس sql
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'
نقل قول: مشکل در خروجی داده ها خاص در دیتابیس sql
3- طراحی جدول اشکال داره:
- مشخصات مشتریان باید در یک جدول دیگه باشه و اینجا فقط باید customer_id نگهداری بشه، هر جا نیاز به مشخصات باشه کافی هست به جدول مشتریان join کنین.
- فیلد تاریخ باید به صورت integer ذخیره بشه و نه varchar ؛ به این ترتیب عملیات مقایسه خیلی سریع انجام میشه. هر جا برای نمایش لازم باشه کافی هست اون رو format کنین.
- فیلدهایی مثل جنسیت که مقادیر کاملا محدود و مشخصی میگیرن باید بصورت tinyint ذخیره بشن؛ در اینجا که فقط دو حالت داریم bit هم میشه استفاده کرد.
نقل قول: مشکل در خروجی داده ها خاص در دیتابیس sql
سلام وقت بخیر دوست عزیز.ممنون از راهنمایتون.خیلی لطف کردید،کارم با pivot
راه افتاد.بازمم ممنون که وقت گذاشتین و راهنمایی کردید.موفق و پیروز باشید