SQL Server: сумма различных столбцов, кроме одного, без использования вложенных / подзапросов - PullRequest
1 голос
/ 16 марта 2019

У меня есть запрос, который дает следующий результат:

Запрос SQL Server

SELECT DISTINCT com.CompanyID,c.Category,p.ModelNo,p.ProductCode,sum(sipl.SubTotal) AS Qty
FROM    SalesInvoiceProductsList AS sipl 
        INNER JOIN SalesInvoice AS s ON sipl.SalesInvoiceID = s.SalesInvoiceID 
        INNER JOIN Product AS p ON sipl.ProductID = p.ProductID 
        INNER JOIN Company AS com ON p.CompanyID = com.CompanyID 
        INNER JOIN Category AS c ON p.CatID = c.CatID
WHERE  (s.DateSold ='2019-02-04')
GROUP BY  p.ModelNo,sipl.SubTotal,p.ProductCode,com.CompanyID, c.Category
order by com.CompanyID

Результат запроса

CompanyID      Category          ModelNo    ProductCode       Qty
---------------------------------------------  -------------------

Gree        Fridge Invertor        1105        ghi             2
Gree        Fridge Invertor        1105        ghi             6
PEL         AC Invertor            1103        abc             1

Я хочу получить следующий результат, но без использования вложенных / подзапросов, поскольку вложенные операторы select дают ошибку при форматировании даты по неизвестной причине при использовании с RDLC report of C#.Короче говоря, мне нужен следующий результат без использования вложенных select операторов

Желаемый результат

CompanyID      Category          ModelNo    ProductCode       Qty
---------------------------------------------  -------------------

Gree        Fridge Invertor        1105        ghi             8
PEL         AC Invertor            1103        abc             1

Следующий запрос дает желаемый результат, но дает ошибку форматирования на датупри использовании с C# RDLC.

Нежелательный запрос, который использует операторы множественного выбора

SELECT b.CompanyID, b.Category, a.ModelNo, a.ProductCode, a.Qty
FROM     (SELECT s.DateSold, p.ProductID, p.ModelNo, p.ProductCode, SUM(sipl.SubTotal) AS Qty
          FROM SalesInvoiceProductsList AS sipl 
          INNER JOIN SalesInvoice AS s ON sipl.SalesInvoiceID = s.SalesInvoiceID 
          INNER JOIN  Product AS p ON sipl.ProductID = p.ProductID
           GROUP BY p.ModelNo, p.ProductCode, p.ProductID, s.DateSold) AS a 
INNER JOIN
           (SELECT DISTINCT p.ProductID, p.CompanyID, cat.Category
            FROM  Product AS p 
            INNER JOIN Category AS cat ON p.CatID = cat.CatID 
            INNER JOIN Company AS c ON p.CompanyID = c.CompanyID) AS b ON a.ProductID = b.ProductID

group by  b.CompanyID, b.Category, a.ModelNo, a.ProductCode, a.Qty,a.DateSold 
having a.DateSold = '2019-02-04'

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Использовать оконную функцию вместо группировки по:

SELECT DISTINCT com.CompanyID,c.Category,p.ModelNo,p.ProductCode,
       SUM(sipl.SubTotal) OVER(PARTITION BY p.ModelNo, com.CompanyID,c.Category,p.ModelNo,p.ProductCode) AS Qty
FROM    SalesInvoiceProductsList AS sipl 
        INNER JOIN SalesInvoice AS s ON sipl.SalesInvoiceID = s.SalesInvoiceID 
        INNER JOIN Product AS p ON sipl.ProductID = p.ProductID 
        INNER JOIN Company AS com ON p.CompanyID = com.CompanyID 
        INNER JOIN Category AS c ON p.CatID = c.CatID
WHERE  (s.DateSold ='2019-02-04')
order by com.CompanyID
0 голосов
/ 16 марта 2019

Я думаю, вам просто нужно исправить GROUP BY:

SELECT com.CompanyID, c.Category, p.ModelNo, p.ProductCode,
       sum(sipl.SubTotal) AS Qty
FROM SalesInvoiceProductsList sipl JOIN
     SalesInvoice s
     ON sipl.SalesInvoiceID = s.SalesInvoiceID JOIN
     Product p JOIN
     ON sipl.ProductID = p.ProductID 
     Company com
     ON p.CompanyID = com.CompanyID JOIN
     Category c
     ON p.CatID = c.CatID
WHERE  s.DateSold ='2019-02-04'
GROUP BY com.CompanyID, c.Category, p.ModelNo, p.ProductCode
order by com.CompanyID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...