2010-09-29 24 views
6

Tôi có dữ liệu này:Vấn đề trong việc Sum

name qty  date     flag 
---------------------------------------------  
abc  255  11/10/1986 12:00:00 AM IN 
abc  300  11/10/2010 12:00:00 AM IN 
abc  12  11/10/2012 12:00:00 AM OUT 
abc  13  11/9/2010 12:00:00 AM OUT 
NULL NULL NULL     NULL 

Tôi muốn để có được tổng qty ở đó hàng cụ thể:

  • Nếu flag là "trong", sau đó nó sẽ thêm đến số tiền
  • nếu flag là "hết", sau đó nó sẽ trừ từ tổng số

Trả lời

13
SELECT SUM(case flag when 'IN' then qty else -qty end) 
from table 
WHERE ..... Your conditions here ... 
-1

Tôi có thể nghĩ ra ba cách để thực hiện việc này. Đầu tiên là một vòng lặp với câu lệnh if, có lẽ tôi sẽ không sử dụng tùy chọn đó.

Thứ hai là để sử dụng LINQ để làm việc tính toán, kiểm tra trang web này nếu bạn không biết LINQ http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

Bạn có thể có thể sử dụng Lamda Expressions tuy nhiên tôi không tuyệt vời với họ và tôi không chắc chắn 100% làm thế nào để đi về nó, nhưng tôi cảm thấy Lamda Expressions rất có thể sẽ cung cấp cho bạn các giải pháp thanh lịch nhất.

+0

Đây có phải là câu trả lời cho một câu hỏi khác không? Nếu không thì -1 cho đề xuất đưa tất cả dữ liệu trở lại ứng dụng và sử dụng LINQ để tổng hợp nó khi một giải pháp SQL hoàn toàn thỏa đáng tồn tại. –

+0

Cảm ơn Guys Solution Đã làm việc Cảm ơn bạn Rất nhiều – Rohan

+0

Martin, tôi giả định rằng một mệnh đề where sẽ được sử dụng trong LINQ được sử dụng trong câu lệnh LINQ, sẽ chỉ trả về các bản ghi cần thiết khi LINQ tạo các câu lệnh SQL khá tốt. Có nói rằng tôi đã xem xét thông qua thẻ C# và bỏ lỡ rằng câu hỏi này thực sự là một câu hỏi sql – TheLukeMcCarthy

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