SQL-запрос для отображения продаж за два разных месяца - PullRequest
1 голос
/ 23 августа 2011


Мне было интересно, какой метод наиболее часто используется при создании запроса, отображающего продажи за два разных месяца (выбранных в параметре).

Моя база данных выглядит примерно так:

Posting Date    Company      Size    Sales
01/01/2011      Microsoft    1000    900

У меня уже есть параметр, в котором выбран "год-месяц". Мне нужно иметь два параметра, чтобы я мог сравнивать продажи в «год-месяц» в Microsoft Visual Studio.

Таким образом, запрос должен иметь два параметра: @ PostingDate1 и @ PostingDate2

Спасибо за любую помощь!

- ОБНОВЛЕНИЕ -

Попытка сделать это более понятным.
Два параметра для выбора будут "год-месяц"
Чтобы таблица результатов выглядела так, когда для параметра 1: январь 2011 года выбран параметр, а для параметра 2 - февраль 2011 года выбран параметр «год (не имеет значения, какие месяцы выбраны, просто результаты будут отличаться) месяцы)

Company     Size     Sales1    Sales2
Microsoft   1000     100       200

То есть, если продажи за январь 2011 года были 100
и продажи за февраль 2011 года составили 200

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Я думаю, что вы хотите сделать CROSS JOIN, но я не совсем уверен, что понял ваш вопрос. Если результаты вашего запроса находятся в ОДНОЙ строке, то я рекомендую CROSS JOIN, а не, тогда, вероятно, лучше не использовать его. Это должно быть примерно так:

SELECT A.[Posting Date] [Posting Date 1], A.Company Company1, A.Size Size1, A.Sales Sales1,
       B.[Posting Date] [Posting Date 2], B.Company Company2, B.Size Size2, B.Sales Sales2
FROM (SELECT [Posting Date], Company, Size, Sales
      FROM YourTable
      WHERE [Posting Date] = @PostingDate1) A
CROSS JOIN (SELECT [Posting Date], Company, Size, Sales
            FROM YourTable
            WHERE [Posting Date] = @PostingDate2) B
0 голосов
/ 24 августа 2011

Мой ответ:

Я закончил тем, что использовал «UNION», не знаю, является ли это более подходящим, но он избавился от избыточных данных от использования «CROSS JOIN».

SELECT 
A.Company, A.Size, SUM(A.Sales) as Sales1, SUM(B.Sales2)
FROM
(
(SELECT Company, Size, Sales as Sales, 0 as Sales2
FROM Sales
WHERE Posting date = @PostingDate1) AS A
UNION
(SELECT Company, Size, 0 as Sales, Sales as Sales2
FROM Sales
WHERE Posting date = @PostingDate2)
) AS B
)
GROUP BY 
A.Company, A.Size
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...