Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL заявка за сравняване на продажбите на продукти по месеци

Казусът е моят най-добър sql приятел. Нуждаете се също от таблица за времето, за да генерирате вашите 0 оборота и през двата месеца.

Предположенията се основават на наличието на следните таблици:

и

Пример 1 без празни редове:

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

ВРЪЩАНЕ:

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

Пример 2 с празни редове:Ще използвам подзаявка (но други може и да не) и ще върна празен ред за всяка комбинация от продукт и година и месец.

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

ВРЪЩАНЕ:

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

Имайте предвид, че повечето инструменти за отчитане ще направят тази кръстосана таблица или матрична функционалност и сега, като се замисля, SQL Server 2005 има обобщен синтаксис, който ще направи и това.

Ето някои допълнителни ресурси. CASEhttp://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. Импортирайте колони на електронни таблици на Excel в базата данни на SQL Server

  2. Премахване на първичен ключ (клъстериран индекс) за увеличаване на производителността на вмъкване

  3. Как да форматирам дата и час като M/D/YYYY в SQL Server?

  4. Сценарий за време на проектиране на SQL-Server DB (разпределен или централизиран)

  5. Изчисляване на разстоянието между две точки (ширина, дължина)