2013-05-05 13 views
5

Tôi có hai câu hỏi này như sau:trừ đi hai cột khác nhau từ 2 lựa chọn trên cùng một bảng

SELECT globalid, name, price, sum(qnt) as pozitive 
from main 
where [date-out] is null 
group by globalid, name, price; 

truy vấn này mang lại cho tổng của số lượng các hạng mục khác nhau trong hai loại ngày, ngày tạongày trong.

SELECT globalid, sum(qnt) as negative 
from main 
where [date-out] is not null 
group by globalid; 

truy vấn này cung cấp cho tổng số lượng đưa ra khỏi kho các mặt hàng khác nhau trong ngày-out -s.

Tôi muốn thực hiện một DataSet có các lĩnh vực sau:

globalid - tên - giá - trong kho - bán - tổng

Tôi có tìm thấy một số ví dụ trực tuyến nhưng, chúng chủ yếu là với hàm đếm, hoặc nếu với tổng, chỉ một trong các truy vấn có điều kiện, không phải cả hai. Tôi đang sử dụng SQL Server, giúp đỡ bất kỳ được đánh giá cao.

Trả lời

2

Có vẻ như bạn có thể sử dụng CASE với SUM - không cần bất kỳ truy vấn con:

SELECT 
    globalid, 
    name, 
    price, 
    sum(case when [date-out] is null then qnt end) positive, 
    sum(case when [date-out] is not null then qnt end) negative, 
    sum(qnt) total 
from main 
group by 
    globalid, 
    name, 
    price 
1
select x.globalid, x.name, x.price, x.positive as [in stock], x.negative as [sold], x.positive + x.negative as [total] 
from 
(
SELECT globalid, 
      name, 
      price, 
    sum(case when [date-out] is not null then qnt else 0 end) as negative, 
    sum(case when [date-out] is null then qnt else 0 end) as positive 
from main 
where [date-out] is not null 
group by globalid, name, price 
) as x