2011-06-01 133 views
3

我有2選擇語句,並希望將它們合併,以便它們顯示在1個表中。結合2選擇語句

選擇1:

SELECT 
LAST_DAY, SUM(BILLABLE), AVG(BILLABLE) 
FROM EMPLOYEES 
GROUP BY YEAR(LAST_DAY),WEEK(LAST_DAY) ORDER BY LAST_DAY 

選擇2:

SELECT BILLABLE 
FROM EMPLOYEES 
WHERE NAME LIKE '$lookup%' 

這裏的目標是展示每週全體員工的結算金額和平均(第一個SELECT語句),然後用添加列特定的「查找」員工在該周的可結算金額。

這兩個陳述都單獨運作良好,但如果他們能夠輕鬆地比較他們每週與平均水平的比較情況,那麼這對員工來說就會更有意義。

編輯爲例:

EMPLOYEE表看起來是這樣的

 
NAME | LAST_DAY | BILLABLE 
Bob 05/13/2011 18.5 
Mary 05/13/2011 12.68 
Steve 05/13/2011 15.2 
Bob 05/06/2011 14.1 
Mary 05/06/2011 11.17 
Steve 05/06/2011 23.62 

我想要查詢的結果是這個樣子:
假設$查找==「鮑勃」

 
LAST_DAY | ALL_BILLABLE_TOTAL | ALL_BILLABLE_AVG | EMPLOYEE_BILLABLE_TOTAL 
05/13/2011  46.38    15.46     18.5 
05/06/2011  48.89    16.29     14.1 

+0

對於每位員工,每週有一行? – 2011-06-01 13:05:06

+0

是的。每個員工每週有一個記錄。有~50個workersss。 – mikepreble 2011-06-01 13:44:35

回答

2

「查找」行的東西看起來可能是一個混亂,所以我會質疑你的設計。此外,它看起來像你的「員工」表實際上不是員工的行,而是每週的銷售行或其他東西。它看起來不像它的3NF,這可能會導致你很多頭痛。無論如何,我認爲這會做你想要什麼:

SELECT 
    SQ.last_day, 
    SQ.all_billable_total, 
    SQ.avg_billable_total, 
    LU.billable AS employee_billable_total 
FROM 
    (
     SELECT 
      E.last_day, 
      SUM(E.billable) AS all_billable_total, 
      AVG(E.billable) AS avg_billable_total, 
     FROM 
      Employees 
     WHERE 
      name NOT LIKE '$lookup%' 
     GROUP BY 
      E.last_day 
    ) SQ 
LEFT OUTER JOIN Employees LU ON 
    LU.name LIKE '$lookup%' AND 
    LU.last_day = SQ.last_day 

的加入到查找行會導致多種結果,如果您有符合加入該多行。如果這僅僅是一個行理貨,本週的銷量,然後擺脫那些行,並且做這樣的事情:

SELECT 
    E.last_day, 
    SUM(CASE WHEN name = @name THEN E.billable ELSE NULL END) AS all_billable_total, 
    AVG(CASE WHEN name = @name THEN E.billable ELSE NULL END) AS avg_billable_total, 
    SUM(E.billable) AS employee_billable_total 
FROM 
    Employees E 
WHERE 
    E.last_day IN (SELECT last_day FROM Employees WHERE name = @name) 
GROUP BY 
    E.last_day 

您需要使用NULL的CASE語句,因爲使用0將甩開平均水平。

+0

除了內部select語句中的where子句之外,第一個示例運行良好,這並不是真正需要的。我拿出來,查詢工作得很好。非常感謝你的幫助。 – mikepreble 2011-06-01 15:17:02

+0

不客氣。我將刪除該部分代碼。我原以爲你試圖爲單個員工獲取信息。 – 2011-06-01 15:26:12

+0

另請注意......我添加了一張支票,以便您不計算正常總計中的「查找」行。如果可以,請將這些行從數據中提取出來。 – 2011-06-01 15:30:26