簡體   English   中英

多個SQL選擇以及在同一表上的位置

[英]Multiple SQL Select and Where on Same Table

我需要在MYSQL數據庫的一個表上進行查詢。 在此查詢中,我需要使用不同的位置進行多個選擇。

我當前的查詢是:

$result = mysql_query("
    SELECT
        last_name, first_name, user_name,
        SUM(rthours) as rthours, SUM(othours) as others,
        SUM(trthours) as trthours, SUM(tothours) as tot hours
    FROM data
    WHERE labor_date BETWEEN '$start' AND '$end'
    ORDER BY last_name ASC
");

我還需要選擇以下兩個:

SUM(rthours) as vhours FROM data WHERE decription = 'vacation' AND labor_date BETWEEN '$start' AND '$end'

SUM(rthours) as shours FROM data WHERE decription = 'sick' AND labor_date BETWEEN '$start' AND '$end'

如何將所有三個選擇組合到一個查詢中,以便可以在隨后輸出的表中使用它們。

謝謝你的幫助!

您可以在SUM()使用CASE

SELECT last_name, first_name, user_name,
SUM( CASE WHEN decription = 'vacation' AND labor_date BETWEEN '$start' AND '$end' THEN rthours ELSE 0 END) as rthours,
SUM(CASE WHEN decription = 'sick' AND labor_date BETWEEN '$start' AND '$end' THEN rthours  ELSE 0 END) as shours,    
SUM(othours) as othours, 
SUM(trthours) as trthours, 
SUM(tothours) as tothours 
FROM data 
WHERE labor_date BETWEEN '$start' AND '$end' 
/*missing group by*/
Order by last_name ASC

對於聚合函數,您應該使用組函數

您可以使用UNION ALL 它將幾個查詢的結果合並到一個結果集中。

查找: http : //dev.mysql.com/doc/refman/5.0/en/union.html

這將是一團糟,但是您可以將其作為子查詢來運行:

SELECT last_name, first_name, user_name, SUM(rthours) as rthours,
SUM(othours) as othours, SUM(trthours) as trthours, 
SUM(tothours) as tothours, 
(SUM(rthours) as vhours FROM data WHERE decription = 'vacation' AND labor_date BETWEEN '$start' AND '$end') AS vhours
(SUM(rthours) as shours FROM data WHERE decription = 'sick' AND labor_date BETWEEN '$start' AND '$end') AS shours
FROM data WHERE labor_date BETWEEN '$start' AND '$end' Order by last_name ASC

我無法運行這些表,因為我沒有表或數據,但是它的基本思想很重要

得到它了。

這有效:

$result = mysql_query("SELECT last_name, first_name,
SUM(CASE WHEN description = 'Vacation' THEN rthours ELSE 0 END) as vhours,
SUM(CASE WHEN description = 'Sick' THEN rthours ELSE 0 END) as shours,   
SUM(rthours) as rthours,
SUM(othours) as othours,
SUM(trthours) as trthours, 
SUM(tothours) as tothours
FROM data 
WHERE labor_date BETWEEN '$start' AND '$end' Group by last_name Order by last_name ASC");

謝謝您的幫助!!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM