2014-10-19 5 views
0

Попытка отображения продаж для некоторых дат. Столбцы должны быть указанными датами.Лучше всего написать этот запрос SQL Server?

Получил его на работу, но код настолько запутанный и сложный, что мой инстинкт говорит мне, что должен быть простой способ написать это.

Может ли кто-нибудь указать мне в правильном направлении или придумать более элегантное решение?

Запрос

SELECT 
    (SELECT Jul10.TotalSales 
    FROM 
    (SELECT sale.SaleDate, SUM (sale_bow.Qty * bow.Price) As TotalSales 
    FROM sale 
     INNER JOIN sale_bow ON sale_bow.SaleID = sale.SaleID 
     INNER JOIN bow ON bow.BowID = sale_bow.BowID GROUP BY sale.SaleDate) As Jul10 
    WHERE Jul10.SaleDate ='1999-07-10') AsJul10, 
    (SELECT Jul11.TotalSales 
     FROM (SELECT sale.SaleDate, SUM (sale_bow.Qty * bow.Price) As TotalSales 
     FROM sale 
      INNER JOIN sale_bow ON sale_bow.SaleID = sale.SaleID 
      INNER JOIN bow ON bow.BowID = sale_bow.BowID 
GROUP BY sale.SaleDate) As Jul11 
    WHERE Jul11.SaleDate ='1999-07-11') As Jul11, 
(SELECT Jul12.TotalSales 
    FROM 
(SELECT sale.SaleDate, SUM (sale_bow.Qty * bow. Price) As TotalSales 
    FROM sale 
     INNER JOIN sale_bow ON sale_bow.SaleID = sale.SaleID 
     INNER JOIN bow ON bow.BowID = sale_bow.BowID GROUP BY sale.SaleDate) 
As Jul12 WHERE Jul12.SaleDate = '1999-07-12') 
As Jul12, (SELECT Jul13.TotalSales 
    FROM (SELECT sale.SaleDate, SUM (sale_bow.Qty * bow.Price) As TotalSales 
    FROM sale 
     INNER JOIN sale_bow ON sale_bow.SaleID = sale.SaleID 
     INNER JOIN bow ON bow.BowID = sale_bow.BowID 
GROUP BY sale.SaleDate) As Jul13 WHERE Jul13.SaleDate ='1999-07-13') As Jul13 
+0

Возможно попробовать codereview.se – codenheim

ответ

2

Попробуйте это:

SELECT 
    Jul10 = SUM(CASE WHEN SaleDate = '1999-07-10' THEN sale_bow.Qty * bow.Price ELSE 0 END), 
    Jul11 = SUM(CASE WHEN SaleDate = '1999-07-11' THEN sale_bow.Qty * bow.Price ELSE 0 END), 
    Jul12 = SUM(CASE WHEN SaleDate = '1999-07-12' THEN sale_bow.Qty * bow.Price ELSE 0 END), 
    Jul13 = SUM(CASE WHEN SaleDate = '1999-07-13' THEN sale_bow.Qty * bow.Price ELSE 0 END) 
FROM 
    sale 
    INNER JOIN sale_bow ON sale_bow.SaleID = sale.SaleID 
    INNER JOIN bow ON bow.BowID = sale_bow.BowID 
Смежные вопросы