View Full Version : کوری خاص
علی اکبر
شنبه 14 اردیبهشت 1392, 22:16 عصر
دوستان سلام
یک جدول دارم که به طور مختصر اطلاعات ذیل را دارا می باشد
name--------mablagh-----------mahyat
zare----------1000---------------------1
zare----------8000---------------------1
zare----------7000---------------------1
zare----------3000---------------------2
zare----------4000---------------------2
خروجی ان را می خواهم به صورت ذیل گردد
name---------mablagh1---------------mablagh2
zare-------------1000-----------------------3000
zare-------------8000-----------------------4000
zare-------------7000---------------------------0
بدین معنی که ارقام با ماهیت 1 در ستون اول و ارقام با ماهیت 2 در ستون دوم قرار گیرند(فیش حقوقی)
وضمن اینکه اطلاعات وتعداد روکوردها پویا هستند
متشکرم وامیدوارم دستور اس کیوالی برای این موضع باشه
N_D
یک شنبه 15 اردیبهشت 1392, 14:51 عصر
این چیزی که شما درخواست کردین خیلی گنگه..
سوال: آیا همه ردیف ها برای یک نفر بنام zare هست؟
اگه اینطوره حتما اولین ریدف ماهیت 1 باید با اولین ردیف ماهیت بعد از خودش دیده بشه؟ آیا ماهیت شماره 3 وجود خواهد داشت؟ اگر بله توی فیش شما چگونه باید بیاد؟
این سوالات رو پاسخ بده لطفا
علی اکبر
یک شنبه 15 اردیبهشت 1392, 15:23 عصر
1-خیر مربوط به یک نفر نیست
2-ماهیت 3 نداره که ستون سوم داشته باشه
کلا کل ماهیت 1 باید تو ردیف اول باشه وماهیت 2 تو ردیف 2 وضمنا تعداد روکوردهای در هر ماهیت با هم برابر نیست یا می تونه باشه
N_D
یک شنبه 15 اردیبهشت 1392, 17:21 عصر
اگه شماره های ماهیت متوالی باشه کد زیر جواب میده اگه هم نه ابتدا باید با Row_Number شماره گذاری بکنی و بعدش کدو اجرا کنی
Drop table T1
GO
Create Table T1( name varchar(10), Price int,NO int)
GO
Insert into T1 Values( 'Zare1',1000,1)
Insert into T1 Values( 'Zare2',8000,1)
Insert into T1 Values( 'Zare3',7000,1)
Insert into T1 Values( 'Zare1',3000,2)
Insert into T1 Values( 'Zare2',4000,2)
Select T1.Name,T1.Price,T1.NO From T1
GO
Select Name, Price1, Price2
FROM(
Select T1.Name,T1.Price as Price1,T1.NO,T2.Price as Price2
from T1
LEFT JOIN T1 T2 ON T1.NO = T2.No-1 and T1.name = T2.name
) Tbl
Where NO = 1
GO
و حالت دوم زمانیکه ماهیت ترتیبی نباشد
Drop table T1
GO
Create Table T1( name varchar(10), Price int,NO int)
GO
Insert into T1 Values( 'Zare1',1000,10)
Insert into T1 Values( 'Zare2',8000,13)
Insert into T1 Values( 'Zare3',7000,18)
Insert into T1 Values( 'Zare1',3000,23)
Insert into T1 Values( 'Zare2',4000,29)
Select T1.Name,T1.Price,T1.NO From T1
GO
with CTE(name,Price,NO ) as
(
Select top 100 percent
name,Price,
NO = ROW_NUMBER() OVER( partition by name order by NO) FROM T1 order by name , NO
)
Select Name, Price1, Price2
FROM(
Select T1.Name,T1.Price as Price1,T1.NO,T2.Price as Price2
from CTE T1
LEFT JOIN CTE T2 ON T1.NO = T2.No-1 and T1.name = T2.name
) Tbl
Where NO = 1
GO
علی اکبر
یک شنبه 15 اردیبهشت 1392, 23:20 عصر
تشکر فراون
اما احتمالا من اشتباه کردم اطلاعات فوق همه مربوط به یک نفر می باشد ولی می تواند همین اطلاعات اضافه گردد برای نفر دوم
بگذریم اگه همه اطلاعات مربوط به یک نفر بود چکار باید کرد؟
N_D
دوشنبه 16 اردیبهشت 1392, 08:47 صبح
در فیش حقوقی در یک ماه یک نفر نمی تواند عامل حقوقی تکراری داشته باشد بنابر این اصلاعاتی که شما در بالا نوشتید نمی تواند مربوط به یک نفر باشد. پس کد فوق برای همه افراد جواب میدهد.. در ضمن اگه تونستی محتویات جدول مورد نظر را بصورت اسکریپتی همینجا بنویس..
علی اکبر
جمعه 20 اردیبهشت 1392, 10:18 صبح
تشکر
چرا نشه؟ این عامل البته در بانک اصلی یک کد پرسنلی است که رابطه داره با اطلاعات ومشخصات فردی هر فرد
این اطلاعات همه مربوط به سک نفر است که بندهای مختلف به او پرداخت می گردد مثل حق شغل و... واینجا ذخیره می گردد
beh_develop
شنبه 21 اردیبهشت 1392, 00:38 صبح
سلام ،
دستور زیرو امتحان ، فکر کنم دنبال این دستور می گردی
select name,sum(num1) as num1, sum(num2) as bes from (
select name,price as num1, 0 as num2 from myTable where mahiyat = 1
union
select name,0 , price from myTable where mahiyat = 2
) x group by x.name
اگه تعداد ستون ها زیاد باشه روش cross بهتر هست. ولی فکر کنم همین کار شما رو راه بندازه
Reza_Yarahmadi
شنبه 21 اردیبهشت 1392, 11:06 صبح
یک روش میتونه بصورت زیر باشه
Declare @Table Table(name varchar(10), Price int,NO int)
Insert into @Table Values('Zare1', 1000, 1)
Insert into @Table Values('Zare1', 8000, 1)
Insert into @Table Values('Zare1', 7000, 1)
Insert into @Table Values('Zare1', 3000, 2)
Insert into @Table Values('Zare1', 4000, 2)
Insert into @Table Values('Zare2', 2000, 1)
Insert into @Table Values('Zare2', 3000, 1)
Insert into @Table Values('Zare2', 5000, 1)
Insert into @Table Values('Zare2', 1000, 2)
Insert into @Table Values('Zare2', 1500, 2)
;With Tbl as(
Select
ROW_NUMBER() Over(Partition By Name,NO Order By No) RowID
,*
From @Table
)
Select T1.Name, T1.Price Price1, T2.Price Price2
from (
Select *
From Tbl
Where NO = 1)T1
LEFT OUTER JOIN (
Select *
From Tbl
Where NO = 2) T2
ON
T1.Name = T2.Name
AND
T1.RowID = T2.RowID
محمد سلیم آبادی
یک شنبه 22 اردیبهشت 1392, 09:41 صبح
امتحان کنین
SELECT name,
MAX(CASE WHEN No = 1 THEN price END) AS Price1,
MAX(CASE WHEN No = 2 THEN price END) AS price2
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY name, NO ORDER BY NO) rnk
FROM Table_name)d
GROUP BY name, rnk
ORDER BY Name, rnk
علی اکبر
یک شنبه 22 اردیبهشت 1392, 10:46 صبح
فقط خروجی مدایرن عزیز بخش درست بود
ممنون
ممنون
کاش یه کم توضیح می دادید یه چیزایی یاد هم می گرفتیم که این کدها چکار می کنه
به هر حال ممنون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.