2012-11-06 43 views
10

Tôi có một T-SQL-kịch bản chính xác làm việc theo hình thức nàySELECT SUM() TỪ (SELECT (SELECT())

SELECT columnA 
     AS 
     'numbers' 
FROM tableA 
WHERE clause 

Kịch bản này mang lại cho tôi như một cột, được gọi là con số, các số nguyên. muốn tổng hợp này.

Calling 'kịch bản' các dòng trên tôi đã cố gắng thiết lập sau

SELECT SUM(numbers) 
FROM (
      script 
     ) 

Reading select count(*) from select tôi nghĩ này để làm việc, tuy nhiên, nó không. tôi tiếp tục nhận được "cú pháp không đúng gần. "

Tôi không biết nếu nó là quan trọng nhưng đó là ở đây có tên columnA là chính nó maked bởi một tuyên bố SELECT.

+1

Bạn dường như được lạm dụng thuật ngữ "kịch bản". Bạn có thể đăng truy vấn * chính xác * mà bạn đang sử dụng hay không và lỗi * chính xác * cung cấp cho bạn? – ruakh

Trả lời

17

Bạn cần một bí danh trên subquery:

SELECT SUM(numbers) 
FROM  
(
    script -- your subquery will go here 
) src -- place an alias here 

Vì vậy, truy vấn đầy đủ của bạn sẽ là:

select sum(numbers) 
from 
(
    SELECT columnA AS numbers 
    FROM tableA 
    WHERE clause 
) src 
+0

BTW, đây là một vấn đề về tSQL. Oracle không quan tâm nếu bạn bí danh truy vấn con của bạn. Bạn không chắc chắn về MySQL hoặc những người khác, nhưng tSQL yêu cầu một bí danh trên tất cả các truy vấn phụ. – Bill

+2

@Bill: Oracle thực hiện sai ở đó. Nó không phải là một vấn đề để thực hiện những điều đúng. –

+0

@Tính ưu tiên của tôi là đặt bí danh tất cả các truy vấn phụ cho dù có yêu cầu hay không. Nó làm cho nó rõ ràng hơn là nơi dữ liệu đến từ đâu. – Taryn

5

Có hoàn toàn không có vấn đề gì để đạt được những gì bạn muốn. Chúng tôi không nhìn thấy truy vấn entier của bạn, nhưng vấn đề phổ biến nhất là mọi người quên thêm một bí danh để tuyên bố lồng nhau select của họ. Hãy xem mẫu này hoạt động hoàn hảo:

select sum(col1) as sum1 
from (select col1 
     from (select 1 col1 union all select 2 union all select 3) tmp 
    ) tmp2 

Theo OP, đây là câu hỏi cuối cùng của bạn:

SELECT SUM(numbers) 
FROM (
      SELECT columnA 
        AS 
        'numbers' 
       FROM tableA 
      WHERE clause 
     ) tmp