PDA

View Full Version : حل یک مسئله با استفاده از کد SQL



behnam_dr
پنج شنبه 02 مهر 1388, 11:01 صبح
سلام دوستان . برنامه ای ساختم که در آن در ماههای مختلف کارگران حقوق های مختلف گرفته اند. فرض میکنیم کارگر بهروز کلانی در فروردین ماه یک حقوق گرفته و در اردیبهشت ماه یک حقوق دیگر و غیره... ضمنا هر حقوق یک رکورد است یعنی یک کارگر در یه ماه خاص یه حقوق گرفت در یک رکورد .
ضمنانام فیلدها را اینگونه تصور کنید
نام کارگر:name ماهها:mond حقوق هر ماه:Pay
حال میخوام یک گزارشی از لیست کارگران داشته باشم به شکل زیر

http://www.pcnet.ir/images/jadval.jpg

محمد سلیم آبادی
پنج شنبه 02 مهر 1388, 14:53 عصر
PIVOT


DECLARE @a TABLE
(
name nvarchar(50),
mond int,
[MonthName] AS (CASE mond WHEN 1 THEN 'فروردین'
WHEN 2 THEN 'اردیبهشت'
WHEN 3 THEN 'خرداد'
WHEN 4 THEN 'تیر'
WHEN 5 THEN 'مرداد'
WHEN 6 THEN 'شهریور'
WHEN 7 THEN 'مهر'
WHEN 8 THEN 'آبان'
WHEN 9 THEN 'آذر'
WHEN 10 THEN 'دی'
WHEN 11 THEN 'بهمن'
WHEN 12 THEN 'اسفند'END)
PERSISTED,
pay money,
UNIQUE (name, mond),
CHECK ( mond BETWEEN 1 AND 12)
)
SET NOCOUNT ON

INSERT INTO @a VALUES ('Name1', 1, 120.00)
INSERT INTO @a VALUES ('Name1', 2, 125.00)
INSERT INTO @a VALUES ('Name1', 3, 110.00)
INSERT INTO @a VALUES ('Name2', 1, 110.00)
INSERT INTO @a VALUES ('Name2', 9, 90.00)
INSERT INTO @a VALUES ('Name3', 12, 210.00)
INSERT INTO @a VALUES ('Name4', 2, 100.00)

SELECT *
FROM
(
SELECT name, mond, pay
FROM @a
)D
PIVOT
(
MAX(pay)
FOR mond IN (
[1],[2],[3],[4],[6],[7],[8],[9],[10],[11],[12]
)
)Piv

محمد سلیم آبادی
دوشنبه 06 مهر 1388, 00:25 صبح
سلام،
البته اگر از SQL Server 2000 استفاده می کنین یا ... یک روش دیگر نیز وجود دارد که ساده است ولی نسبت به عملگر Pivot عملکرد خوبی ندارد. آن روش استفاده از Subquery در ماده ی Select می باشد.