你可以嘗試這樣的事情
DECLARE @Employees TABLE(
EmpCode INT,
EmpName VARCHAR(50)
)
INSERT INTO @Employees (EmpCode,EmpName) SELECT 1, 'Adam'
INSERT INTO @Employees (EmpCode,EmpName) SELECT 2, 'David'
DECLARE @sales TABLE(
EmpCode INT,
product VARCHAR(50),
Date DATETIME,
Price FLOAT,
Amount FLOAT
)
INSERT INTO @sales (EmpCode,product,Date,Price,Amount) SELECT 1, 'A', '01 Jan 2009', 5, 10
INSERT INTO @sales (EmpCode,product,Date,Price,Amount) SELECT 1, 'A', '01 Mar 2009', 5, 10
INSERT INTO @sales (EmpCode,product,Date,Price,Amount) SELECT 1, 'A', '01 May 2009', 5, 10
INSERT INTO @sales (EmpCode,product,Date,Price,Amount) SELECT 1, 'A', '01 Jul 2009', 5, 10
INSERT INTO @sales (EmpCode,product,Date,Price,Amount) SELECT 1, 'A', '01 Sep 2009', 5, 10
INSERT INTO @sales (EmpCode,product,Date,Price,Amount) SELECT 2, 'A', '01 Jan 2009', 5, 10
INSERT INTO @sales (EmpCode,product,Date,Price,Amount) SELECT 2, 'A', '01 May 2009', 5, 10
INSERT INTO @sales (EmpCode,product,Date,Price,Amount) SELECT 2, 'A', '01 Sep 2009', 5, 10
DECLARE @Period1Start DATETIME,
@Period1End DATETIME,
@Period2Start DATETIME,
@Period2End DATETIME
SELECT @Period1Start = '01 Jan 2009',
@Period1End = '30 Jun 2009',
@Period2Start = '01 Jul 2009',
@Period2End = '31 Dec 2009'
SELECT e.EmpName,
Totals.Period1,
Totals.Period2
FROM @Employees e INNER JOIN
(
SELECT EmpCode,
SUM(CASE WHEN Date BETWEEN @Period1Start AND @Period1End THEN Price * Amount ELSE 0 END) Period1,
SUM(CASE WHEN Date BETWEEN @Period2Start AND @Period2End THEN Price * Amount ELSE 0 END) Period2
FROM @sales
GROUP BY EmpCode
) Totals ON e.EmpCode = Totals.EmpCode
+1了非常完整的SQL代碼。你可以做到這一點,沒有我想的子查詢。我上面已經發布。 – 2009-12-03 15:40:03