PDA

View Full Version : دستور سلکت جهت ایجاد ستون به تعداد محتویات متفاوت یک سلول



Sal_64
دوشنبه 10 خرداد 1400, 11:54 صبح
سلام
اساتید لطفا عکس ببنید
چیزی شبیه به این نیاز دارم چیکار کنم153350

mazoolagh
سه شنبه 11 خرداد 1400, 07:44 صبح
ساده ترین حالت :
SELECT * FROM
(SELECT name,code,mande FROM TableName) AS Source
PIVOT (SUM(mande) FOR code IN ([1],[2],[3],[4],[5],[6])) AS Result

mazoolagh
سه شنبه 11 خرداد 1400, 07:50 صبح
اگر اسامی ستونها مهم هست و بجای null باید 0 نشون داده بشه (مثل اونچه در تصویر اومده) :
SELECT name,
ISNULL([1],0) AS [mande code 1],
...
...
ISNULL([6],0) AS [mande code 6]
FROM
(SELECT name,code,mande FROM TableName) AS Source
PIVOT (SUM(mande) FOR code IN ([1],[2],[3],[4],[5],[6])) AS Result

Sal_64
سه شنبه 11 خرداد 1400, 08:29 صبح
سلام
متشکرم از پاسخگوییتون
من چیزی شبیه به این نیاز دارم
بجای دستور if چیو بنویسم

select distinct p.p8,p.p5,p.p6, v.codp,


if (a.ssar=6)
sum(a.bed)-sum(a.bes) as mande6
if (a.ssar=1)
sum(a.bed)-sum(a.bes) as mande1
if (a.ssar=4)
sum(a.bed)-sum(a.bes) as mande4
if (a.ssar=5)
sum(a.bed)-sum(a.bes) as mande5
if (a.ssar=7)
sum(a.bed)-sum(a.bes) as mande7
if (a.ssar=8)
sum(a.bed)-sum(a.bes) as mande8


from personeli p
inner join vamc v on p.p1=v.CODP
inner join ACCOUNT a on v.NSAR=a.NSAR
where a.dat <='1400/01/31'
group by p.p5,p.p6,p.p8,v.codp,v.vam,v.mozd,a.bed,a.bes

mazoolagh
چهارشنبه 12 خرداد 1400, 10:01 صبح
سلام و روز خوش
select distinct p.p8,p.p5,p.p6, v.codp,
mande6=
CASE
WHEN a.ssar=6 THEN sum(a.bed)-sum(a.bes)
ELSE 0
END,
mande1=
CASE
WHEN a.ssar=1 THEN sum(a.bed)-sum(a.bes)
ELSE 0
END,
...
...
...
mande8=
CASE
WHEN a.ssar=8 THEN sum(a.bed)-sum(a.bes)
ELSE 0
END
from personeli p
inner join vamc v on p.p1=v.CODP
inner join ACCOUNT a on v.NSAR=a.NSAR
where a.dat <='1400/01/31'
group by p.p5,p.p6,p.p8,v.codp,v.vam,v.mozd,a.bed,a.bes

Sal_64
سه شنبه 18 خرداد 1400, 10:23 صبح
سلام متشکر
به اولین مساوی که
mande6= می رسد این خطا اتفاق می افتد
FROM keyword not found where expected

mazoolagh
یک شنبه 23 خرداد 1400, 08:00 صبح
سلام و روز خوش
من فقط اون بخش IFها رو براتون نوشتم و به مابقی کوئری کاری نداشتم.

اگر از ms sql استفاده میکنین فکر کنم همین که نوشتم درست باشه.

یک کوئری خیلی ساده رو تست کنین.