ورود

View Full Version : از تاریخ ... تاتاریخ ...



masysh
جمعه 15 اردیبهشت 1385, 18:16 عصر
لطفا در نوشتن کوئری که خروجی زیر را بدهد کمک نمایید.
پاداش ها را از یک تاریخ تا یک تاریخ دیگر بدهد. بطوریکه مشخص شود در کدام تاریخ است مانند تصویر زیر:

AminSobati
جمعه 15 اردیبهشت 1385, 18:44 عصر
به نظر میرسه شما Cross-Tab Report نیاز دارید. دقیقا با همین عنوان، در Books Online مطلب وجود داره. مثالش رو ببینید. این هم یک مثال دیگه:


CREATE TABLE Sales
(
SYear INT,
Quarter CHAR(2),
Amount FLOAT
)
GO
INSERT INTO Sales VALUES (2001, 'Q2', 70)
INSERT INTO Sales VALUES (2001, 'Q3', 55)
INSERT INTO Sales VALUES (2001, 'Q3', 110)
INSERT INTO Sales VALUES (2001, 'Q4', 90)
INSERT INTO Sales VALUES (2002, 'Q1', 200)
INSERT INTO Sales VALUES (2002, 'Q2', 150)
INSERT INTO Sales VALUES (2002, 'Q2', 40)
INSERT INTO Sales VALUES (2002, 'Q2', 60)
INSERT INTO Sales VALUES (2002, 'Q3', 120)
INSERT INTO Sales VALUES (2002, 'Q3', 110)
INSERT INTO Sales VALUES (2002, 'Q4', 180)
GO

SELECT * FROM Sales

SELECT DISTINCT SYear,
(SELECT SUM(Amount) FROM Sales
WHERE SYear=SalesDist.SYear
AND Quarter='Q1') AS 'Q1',

(SELECT SUM(Amount) FROM Sales
WHERE SYear=SalesDist.SYear
AND Quarter='Q2') AS 'Q2',

(SELECT SUM(Amount) FROM Sales
WHERE SYear=SalesDist.SYear
AND Quarter='Q3') AS 'Q3',

(SELECT SUM(Amount) FROM Sales
WHERE SYear=SalesDist.SYear
AND Quarter='Q4') AS 'Q4'

FROM Sales SalesDist
GO


اگر در SQL Server 2005 کار میکنید، امکانات بیشتری مثل دستور PIVOT و UNPIVOT وجود داره

masysh
جمعه 15 اردیبهشت 1385, 21:21 عصر
با تشکر فراوان از لطف شما
اگر تعداد ستونها مشخص نباشند چکار می توان کرد؟
چون مشخص نیست کاربر برای ابتدا و انتها چه تاریخهایی وارد میکند و در این بین چند روز داریم.
همچنین این ستونها را چگونه aliase کنم که تاریخ مربوط به همان روز را نشان دهد.

AminSobati
جمعه 15 اردیبهشت 1385, 21:39 عصر
تنها راهش استفاده از Dynamic TSQL هست

masysh
شنبه 16 اردیبهشت 1385, 18:47 عصر
اگر ممکن است با مثال کمکم کنید.

AminSobati
شنبه 16 اردیبهشت 1385, 22:37 عصر
use northwind
go

create proc usp_test
@TabName varchar(100),
@Columns varchar(100)
as
declare @sql varchar(1000)
set @sql='select ' + @Columns + ' from ' + @TabName
exec (@sql)
go

exec usp_test 'Customers','customerid,companyname'
go
exec usp_test 'Orders','orderid,orderdate'
go

شما هم باید Query مورد نظر رو بسازید

masysh
یک شنبه 17 اردیبهشت 1385, 17:38 عصر
من گیج شدم. نمی تونم اینا رو با هم ربط بدم. اصلا مشکل من ساخت query است. یعنی روزها را تک تک وارد کنم.

select * from table1 where date1='85/01/01' as day1
select * from table1 where date1='85/01/02' as day2
....



نمی دونم چی کار کنم، لطفا کمکم کنید...