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

Kueri SQL untuk membandingkan penjualan produk berdasarkan bulan

Pernyataan Kasus adalah teman sql terbaik saya. Anda juga memerlukan tabel waktu untuk menghasilkan 0 putaran di kedua bulan.

Asumsi didasarkan pada ketersediaan tabel berikut:

dan

Contoh 1 tanpa baris kosong:

select
    Category
    ,month
    ,SUM(CASE WHEN YEAR = 2008 THEN Revenue ELSE 0 END) this_year
    ,SUM(CASE WHEN YEAR = 2007 THEN Revenue ELSE 0 END) last_year

from
    sales

where
    year in (2008,2007)

group by
    Category
    ,month

PENGEMBALIAN:

Category  |  Month  |  Rev. This Year  |  Rev. Last Year
Bikes          1          10 000               0
Bikes          2          12 000               11 000
Bikes          3          12 000               11 500
Bikes          4          0                    15 400

Contoh 2 dengan baris kosong:Saya akan menggunakan sub kueri (tetapi yang lain mungkin tidak) dan akan mengembalikan baris kosong untuk setiap kombo produk dan tahun bulan.

select
    fill.Category
    ,fill.month
    ,SUM(CASE WHEN YEAR = 2008 THEN Revenue ELSE 0 END) this_year
    ,SUM(CASE WHEN YEAR = 2007 THEN Revenue ELSE 0 END) last_year

from
    sales
    Right join (select distinct  --try out left, right and cross joins to test results.
                   product
                   ,year
                   ,month
               from
                  sales --this ideally would be from a products table
                  cross join tm
               where
                    year in (2008,2007)) fill


where
    fill.year in (2008,2007)

group by
    fill.Category
    ,fill.month

PENGEMBALIAN:

Category  |  Month  |  Rev. This Year  |  Rev. Last Year
Bikes          1          10 000               0
Bikes          2          12 000               11 000
Bikes          3          12 000               11 500
Bikes          4          0                    15 400
Bikes          5          0                    0
Bikes          6          0                    0
Bikes          7          0                    0
Bikes          8          0                    0

Perhatikan bahwa sebagian besar alat pelaporan akan melakukan fungsi tab silang atau matriks ini, dan sekarang menurut saya SQL Server 2005 memiliki sintaks pivot yang akan melakukan ini juga.

Berikut adalah beberapa sumber tambahan. KASUShttp://www.4guysfromrolla.com/webtech/ 102704-1.shtml SQL SERVER 2005 PIVOThttp://msdn.microsoft.com/en-us /library/ms177410.aspx



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tutorial SQL (DDL, DML) pada contoh dialek MS SQL Server

  2. Cara menampilkan bilah kemajuan saat menjalankan SQLCommand VB.Net besar

  3. PARSE() vs CAST() vs CONVERT() di SQL Server:Apa Perbedaannya?

  4. Apakah lebih cepat untuk MEMPERBARUI satu baris, atau MENGHAPUS dan MEMASUKKAN yang baru?

  5. Bagaimana cara memeriksa apakah string adalah pengidentifikasi unik?