Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Query - Pertumbuhan Penjualan Tahun demi Tahun

Coba kueri ini:

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

Klik tautan di bawah untuk demo yang berfungsi:

SQLFiddle

Pembaruan Terlambat:

Anda juga dapat mencoba pendekatan yang sama menggunakan Ekspresi Tabel Umum. Berikut adalah tampilan kueri di atas menggunakan pendekatan ini:

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

Dan inilah Fiddle lain tempat Anda dapat mengujinya:

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. Bagaimana cara mendapatkan data 7 hari terakhir dari datetime saat ini hingga 7 hari terakhir di sql server

  2. Kesalahan penginstalan SQL Server 2008:Rilis sebelumnya dari Microsoft Visual Studio 2008

  3. Menggunakan tabel bernama dinamis dalam tugas aliran data SSIS

  4. Menyalin tabel terkait multi level di mssql

  5. Jalankan prosedur tersimpan di prosedur tersimpan lain di server SQL