2009-12-03 27 views
0

我有兩個表:一個包含僱員信息,另一個是包括銷售人交易(銷售)的信息(employeee ID)SQL - 獲取銷售數字在2期

表1:員工,代碼名稱...

表2:銷售,employee_code,產品,日期,價格,金額

我想計算每個員工多少可以爲每個2期(一月1日至6月30日和1收入(總量)七月至12月31日)或時間可以是任何時期 - 是這樣的:

名稱_________Period1_1_30_6______Period 1_7_31_12

亞當__________________ 50B $ ______________ 70B $

大衛_________________ 90B $ ______________ 1000B $ ....

回答

1

你可以嘗試這樣的事情

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 
+0

+1了非常完整的SQL代碼。你可以做到這一點,沒有我想的子查詢。我上面已經發布。 – 2009-12-03 15:40:03

0

使用子查詢:

select employee.name, (select sum(amount) from sales where date between <date> and <date>) as <month1>, (select sum(amount) from sales where date between <date> and <date>) as <month1> 
from employee order by employee.name 
0

輕微變化astander的解決方案:

SELECT 
    E.name, 
    SUM(
      CASE 
       WHEN S.sale_date BETWEEN @period_1_start AND @period_1_end THEN S.[amount] 
       ELSE 0 
      END) AS period_1_sales, 
    SUM(
      CASE 
       WHEN S.sale_date BETWEEN @period_2_start AND @period_2_end THEN S.[amount] 
       ELSE 0 
      END) AS period_2_sales 
FROM 
    Employees E 
LEFT OUTER JOIN Sales S ON 
    S.employee_code = E.employee_code AND 
    (
      S.sale_date BETWEEN @period_1_start AND @period_1_end OR 
      S.sale_date BETWEEN @period_2_start AND @period_2_end 
    ) 
GROUP BY 
    E.name