2011-11-15 50 views
6

tính Tôi có một câu hỏi như thế này:sql sử dụng máy chủ cột

select 
(price1 + price2 + price3) as total_price 
from prices 

Làm thế nào tôi có thể sử dụng TOTAL_PRICE cột tính toán để tính tổng khác như thế này?

select 
(price1 + price2 + price3) as total_price, 
(price4 + total_price) as total_price2 
from prices  

Điều này có khả thi không?

+0

'Điều này có khả thi không?', Bạn đã thử nó chưa? –

+1

Ofcourse tôi đã thử nó. Tôi nhận được thông báo "total_price column không hợp lệ". Là những gì tôi đang cố gắng hoàn thành có thể? – Khronos

+4

Không phải bên trong cùng một truy vấn - bộ xử lý truy vấn không thể sử dụng các cột đầu ra làm cột đầu vào. Bạn cần viết công thức mỗi lần hoặc thực hiện truy vấn bên trong, tính toán các cột được tính toán cấp đầu tiên và sau đó chọn từ truy vấn đó, tính toán các công thức cấp tiếp theo. – Arvo

Trả lời

11

Không thể tham chiếu bí danh cột được xác định ở cùng cấp. Các biểu thức xuất hiện trong cùng một pha xử lý truy vấn hợp lý là evaluated as if at the same point in time.

As Joe Celko says

Sự việc xảy ra "tất cả cùng một lúc" trong SQL, không phải "từ trái sang phải" như họ sẽ trong một tập tin tuần tự/mô hình ngôn ngữ thủ tục

Bạn có thể định nghĩa nó trong CTE và sau đó sử dụng lại nó bên ngoài CTE.

Ví dụ

WITH T 
    AS (SELECT (price1 + price2 + price3) AS total_price, 
       price4 
     FROM prices) 
SELECT total_price, 
     (price4 + total_price) AS total_price2 
FROM T 
1
select T.total_price, 
     P.price4 + T.total_price as total_price2 
from prices as P 
    cross apply (select P.price1 + P.price2 + P.price3) as T(total_price) 
3

tôi cũng xem xét một computed column trên bàn nếu điều này sẽ sử dụng thường xuyên

ALTER TABLE prices ADD 
    total_price AS (price1 + price2 + price3) 

Sau đó truy vấn của bạn là

select 
    total_price, 
    (price4 + total_price) as total_price2 
from prices 

Bằng cách này , bạn có thể áp dụng D Nguyên tắc RY ...

Các vấn đề liên quan