2013-08-07 75 views
0

我在下面的所有mysql語句都正常工作,直到我添加(sub_total - discount_total) AS total,如何在SELECT中使用別名

我猜這是因爲我打電話給尚未定義的別名(sub_totaldiscount_total)。

如何定義別名,因此不會引發錯誤#1054 - Unknown column 'sub_total' in 'field list'

SELECT SQL_CALC_FOUND_ROWS 
    `bookings`.`id`, 
    `bookings`.`client_id`, 
    `bookings`.`vehicle_id`, 
    `bookings`.`vehicle_hire`, 
    (insurance_driver_1 + insurance_driver_2 + insurance_driver_3) AS insurance_total, 
    `bookings`.`bedding_qty`, 
    `bookings`.`bedding_price`, 
    `bookings`.`promo_discount`, 
    `bookings`.`promo_is_percent`, 
    `bookings`.`promo_code`, 
    (vehicle_hire + insurance_driver_1 + insurance_driver_2 + insurance_driver_3) + (bedding_qty * bedding_price) AS sub_total, 
    CASE 
     WHEN promo_is_percent = 1 
      THEN (((vehicle_hire + insurance_driver_1 + insurance_driver_2 + insurance_driver_3) + (bedding_qty * bedding_price))/100) * promo_discount 
     WHEN promo_is_percent = 0 
      THEN promo_discount 
    END as discount_total, 
    (sub_total - discount_total) AS total 
FROM `bookings` 
WHERE `bookings`.`status` = 'Quote' 
ORDER BY `bookings`.`id` desc 
LIMIT 0, 10 

感謝

更新

工作下面的例子,

`SELECT SQL_CALC_FOUND_ROWS *,  
(sub_total - discount_total) AS total 
FROM (
SELECT 
`bookings`.`id`, 
`bookings`.`client_id`, 
`bookings`.`vehicle_id`, 
`bookings`.`vehicle_hire`, 
(insurance_driver_1 + insurance_driver_2 + insurance_driver_3) AS insurance_total, 
`bookings`.`bedding_qty`, 
`bookings`.`bedding_price`, 
`bookings`.`promo_discount`, 
`bookings`.`promo_is_percent`, 
`bookings`.`promo_code`, 
(vehicle_hire + insurance_driver_1 + insurance_driver_2 + insurance_driver_3) + (bedding_qty * bedding_price) AS sub_total, 
CASE 
    WHEN promo_is_percent = 1 
     THEN (((vehicle_hire + insurance_driver_1 + insurance_driver_2 + insurance_driver_3) + (bedding_qty * bedding_price))/100) * promo_discount 
    WHEN promo_is_percent = 0 
     THEN promo_discount 
END as discount_total 
FROM `bookings` 
WHERE `bookings`.`status` = 'Quote' 
) AS src 
ORDER BY src.`id` desc 
LIMIT 0, 10` 

回答

1

對於你的問題我會解決它是這樣的:

SELECT *,  
(sub_total - discount_total) AS total 
FROM (
SELECT SQL_CALC_FOUND_ROWS 
`bookings`.`id`, 
`bookings`.`client_id`, 
`bookings`.`vehicle_id`, 
`bookings`.`vehicle_hire`, 
(insurance_driver_1 + insurance_driver_2 + insurance_driver_3) AS insurance_total, 
`bookings`.`bedding_qty`, 
`bookings`.`bedding_price`, 
`bookings`.`promo_discount`, 
`bookings`.`promo_is_percent`, 
`bookings`.`promo_code`, 
(vehicle_hire + insurance_driver_1 + insurance_driver_2 + insurance_driver_3) + (bedding_qty * bedding_price) AS sub_total, 
CASE 
    WHEN promo_is_percent = 1 
     THEN (((vehicle_hire + insurance_driver_1 + insurance_driver_2 + insurance_driver_3) + (bedding_qty * bedding_price))/100) * promo_discount 
    WHEN promo_is_percent = 0 
     THEN promo_discount 
END as discount_total 
FROM `bookings` 
WHERE `bookings`.`status` = 'Quote' 
) AS src 
ORDER BY src.`id` desc 
LIMIT 0, 10 

但是,這只是如果你一定要避免重新輸入你的專欄的整個公式。

你還考慮過在mysql中創建一個計算列嗎?

+0

謝謝!我會列出總計,只想學習如何做更多的事情。另外'SQL_CALC_FOUND_ROWS'應該放在第一個'SELECT'中。# – arbme

+0

@arbme ok很酷,我工作在mysql上已經有一段時間了,但是我知道它的語法不會和mssql差別太大 – ermagana