ورود

View Full Version : تبدیل ردیف به ستون در Quary



ir_programmer
چهارشنبه 18 بهمن 1385, 10:00 صبح
در صورت بودن تایپیک مشابه ابتدا عذرخواهی میکنم و درخواست راهنمایی به تایپیک مورد نظر رو دارم.

چطور میشه با دستورات SQL (نه گزارش) نتیجه ای بشکل زیر داشت؟


جدول 1:
نام و نام خانوادگی - نام درس - نمره
مثل:
شاهین رضایی - فارسی - 20
شاهین رضایی - دینی - 18
شاهین رضایی - زبان - 17
محمد عالی پور - دینی - 14
محمد عالی پور - زبان - 19

خروجی مورد نیاز:

نام و نام خانوادگی - فارسی - دینی - زبان ...
شاهین رضایی 20 18 17
محمد عالی پور - 14 19
...

Kamyar.Kimiyabeigi
چهارشنبه 18 بهمن 1385, 10:07 صبح
شما در واقع نیاز به Cross-Tab Reports دارین که به pivot هم مشهوره. در BOL توضیحات مفصلی داده شده که مثال BOL را براتون میزارم


USE tempdb
GO

CREATE TABLE Pivot
( Year SMALLINT,
Quarter TINYINT,
Amount DECIMAL(2,1) )
GO
INSERT INTO Pivot VALUES (1990, 1, 1.1)
INSERT INTO Pivot VALUES (1990, 2, 1.2)
INSERT INTO Pivot VALUES (1990, 3, 1.3)
INSERT INTO Pivot VALUES (1990, 4, 1.4)
INSERT INTO Pivot VALUES (1991, 1, 2.1)
INSERT INTO Pivot VALUES (1991, 2, 2.2)
INSERT INTO Pivot VALUES (1991, 3, 2.3)
INSERT INTO Pivot VALUES (1991, 4, 2.4)
GO

SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM dbo.Pivot
GROUP BY Year
GO

ir_programmer
چهارشنبه 18 بهمن 1385, 10:42 صبح
این مثال رو قبلا دیدم.
اما من از تعداد Q ها اطلاعی ندارم. یعنی تعدادشون متغیره !
این مثال برای چهار تاست : Q1,Q2,Q3,Q4
بیشتر راهنمایی کنین!

Kamyar.Kimiyabeigi
چهارشنبه 18 بهمن 1385, 10:50 صبح
ممکنه ساختار جدولتون را برام بزارین تا بتونم کمکتون کنم (ترجیحاً با دیتای تستی)

ir_programmer
چهارشنبه 18 بهمن 1385, 15:19 عصر
این ساختار دیتابیس:


CREATE TABLE [dbo].[tblLessens] (
[LessenID] [numeric](18, 0) NOT NULL ,
[LessenName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1256_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[tblScores] (
[ScoreItemNo] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
[StudentID] [numeric](18, 0) NULL ,
[LessenID] [numeric](18, 0) NULL ,
[Score] [numeric](18, 0) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[tblStudents] (
[StudentID] [numeric](18, 0) NOT NULL ,
[FirstName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1256_CI_AS NULL ,
[LastName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1256_CI_AS NOT NULL
) ON [PRIMARY]
GO



اینم لینک دیتابیس با داده تستی:
http://www.megaupload.com/?d=LCMF406K
یا
http://www.mooload.com/new/file.php?file=files/070207/1170851773/Data.rar

ir_programmer
چهارشنبه 18 بهمن 1385, 16:11 عصر
خودم سرچ کردم مشکلم حل شد.
اینم لینکش واسه دوستان دیگه
http://blog.crowe.co.nz/archive/2005/09/05/250.aspx