2010-04-07 40 views
5

Tôi có cơ sở dữ liệu với giả định cho phép hai cột (service_date & invoice_amount). Tôi muốn tạo một truy vấn SQL để truy xuất và nhóm dữ liệu cho mỗi năm tài chính (tháng 7 đến tháng 6).Truy vấn SQL để truy xuất dữ liệu năm tài chính được nhóm theo năm

Tôi có hai năm dữ liệu để có hai năm tài chính (tức là 2 kết quả).

Tôi biết tôi có thể thực hiện việc này theo cách thủ công bằng cách tạo truy vấn SQL để nhóm theo tháng rồi chạy dữ liệu qua PHP để tạo dữ liệu năm tài chính nhưng tôi muốn có truy vấn SQL.

Tất cả ý tưởng đều được chào đón.

Cảm ơn

Trả lời

17
SELECT 
    CASE WHEN MONTH(service_date)>=7 THEN 
      concat(YEAR(service_date), '-',YEAR(service_date)+1) 
    ELSE concat(YEAR(service_date)-1,'-', YEAR(service_date)) END AS financial_year, 
    SUM(invoice_amount) 
FROM mytable 
GROUP BY financial_year 

sản xuất o/p như dưới đây

financial_year invoice_amount 
2007-2008  10000.00 
2008-2009  15000.00 
2009-2010  20000.00 
+1

Hey kỳ lạ của nó , làm thế nào bạn biết bảng của mình được gọi là mytable quá? Và bạn đã sử dụng tài chính_year với dấu gạch dưới .. – CResults

+0

tôi kiểm tra nó với bảng mẫu của tôi. trên truy vấn chỉ là ví dụ tôi không biết những gì tên bảng của mình is.i kiểm tra xem nó trong trình duyệt của riêng tôi và tôi tìm thấy nó chính xác vì vậy tôi hiển thị mẫu o/p để biết ai đó những gì họ sẽ nhận được – Salil

+0

Cảm ơn bạn đã giúp đỡ bạn đời của bạn. Hoạt động hoàn hảo. – mlevit

1

này làm việc cho tôi trong MSSQL .. Hy vọng nó sẽ làm việc cho bạn trong MySQL

SELECT 
    CASE WHEN MONTH(service_date)>=7 THEN 
      YEAR(service_date)+1 
    ELSE YEAR(service_date) END AS financial_year, 
    SUM(invoice_amount) 
FROM mytable 
GROUP BY 
    CASE WHEN MONTH(service_date)>=7 THEN 
      YEAR(service_date)+1 
    ELSE YEAR(service_date) 
Các vấn đề liên quan