Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn SQL - Tăng trưởng doanh số bán hàng qua từng năm

Hãy thử truy vấn này:

SELECT t1.tenant, t1.YEAR, t1.SALES,
    CASE WHEN t2.YEAR IS NOT NULL THEN
        FORMAT(
            CONVERT(DECIMAL(10, 2), (t1.SALES - t2.SALES)) /
            CONVERT(DECIMAL(10, 2), t2.SALES), 'p')
    ELSE NULL END AS "YEARLY GROWTH"
FROM
(
    SELECT tenant, YEAR(date) AS YEAR, SUM(sales) AS SALES
    FROM tenantSales
    GROUP BY tenant, YEAR(date)
) t1
LEFT JOIN
(
    SELECT tenant, YEAR(date) AS YEAR, SUM(sales) AS SALES
    FROM tenantSales
    GROUP BY tenant, YEAR(date)
) t2
ON t1.tenant = t2.tenant AND t2.YEAR = t1.YEAR - 1

Nhấp vào liên kết bên dưới để xem bản demo hoạt động:

SQLFiddle

Cập nhật muộn:

Bạn cũng có thể thử cách tiếp cận tương tự bằng cách sử dụng Biểu thức Bảng Thông thường. Đây là truy vấn ở trên sẽ trông như thế nào khi sử dụng cách tiếp cận này:

WITH cte AS(SELECT tenant, YEAR(date) AS YEAR, SUM(sales) AS SALES
            FROM tenantSales
            GROUP BY tenant, YEAR(date))
SELECT c1.*, CONVERT(varchar,
                 CONVERT(DECIMAL(10,2),
                     CONVERT(DECIMAL(10, 2), (c1.SALES - c2.SALES)) /
                     CONVERT(DECIMAL(10, 2), c2.SALES))) + '%' AS "YEARLY GROWTH"
FROM cte c1
LEFT JOIN cte c2 ON c1.tenant = c2.tenant AND c2.YEAR = c1.YEAR - 1

Và đây là một Fiddle khác mà bạn có thể kiểm tra điều này:

SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Câu lệnh trường hợp trong SQL sử dụng Like

  2. Ký tự rỗng trong TSQL là gì?

  3. DTU trong cơ sở dữ liệu Azure SQL là gì và cách tìm ra chúng ta cần bao nhiêu

  4. Xử lý lỗi SQL Server:ngoại lệ và hợp đồng máy khách-cơ sở dữ liệu

  5. TSQL trả về KHÔNG hoặc CÓ thay vào đó là TRUE hoặc FALSE