Как сделать вложенный регистр в Select SQL?

0

У меня есть этот оператор Case SQL, который вычисляет totalvolume данной величины.


SELECT
DropshipPackinglist.CaseNumber as 'CASE NO.',  
DropshipPackinglist.ItemNumber as 'BOM NO.', 
DropshipPackinglist.Quantity as 'QTY',
                      CASE 
                      WHEN DropshipPackinglist.Quantity >=31 and DropshipPackinglist.Quantity <= 36 then '1090x730x1460'
                      WHEN DropshipPackinglist.Quantity >=25 and DropshipPackinglist.Quantity <= 30  then '1090x730x1230'
                      WHEN DropshipPackinglist.Quantity >=19 and DropshipPackinglist.Quantity <= 24  then '1090x730x1000'
                      WHEN DropshipPackinglist.Quantity >=13 and DropshipPackinglist.Quantity <= 18  then '1090x720x790'
                      WHEN DropshipPackinglist.Quantity >=7 and DropshipPackinglist.Quantity <= 17  then '1090x720x570'
                      WHEN DropshipPackinglist.Quantity >=1 and DropshipPackinglist.Quantity <= 6  then '1090x720x350'

                      ELSE 'Unkown' 
                      end
                      as 'TOTAL VOLUME (MM3)'                                      

FROM         DropshipPackinglist INNER JOIN
                      HuaweiDescription ON DropshipPackinglist.ItemNumber = HuaweiDescription.ItemNumber

WHERE     (DropshipPackinglist.BatchCode LIKE '%0005041007100AHWA11HG')

-------------------------------------------------------------------------------------------
Result:

CaseNumber ItemNumber      Quantity  TotalVolume
1     52411573  5   1090x720x350
1     52411576  20  1090x730x1000
2     52411576  36  1090x730x1460

-------------------------------------------------------------------------------------------

Теперь я хочу сгруппировать номер календаря и результат только с одним тотальным объемом.

И результат будет таким.

CaseNumber ItemNumber      Quantity  TotalVolume
1     52411573  5   1090x730x1230  -- sum(casenumber 1)=25
1     52411576  20  1090x730x1230  --
2     52411576  36  1090x730x1460

Как решить эту проблему.. спасибо в отношении.

Теги:
sql-server

2 ответа

0
Лучший ответ
;with SuperSelect as 
(
 SELECT  dpl.CaseNumber as 'CASE NO.'
     ,dpl.ItemNumber as 'BOM NO.'
     ,dpl.Quantity as 'QTY'
     ,CASE WHEN dpl.Quantity >= 31 and dpl.Quantity <= 36 then '1090x730x1460'
     WHEN dpl.Quantity >= 25 and dpl.Quantity <= 30 then '1090x730x1230'
     WHEN dpl.Quantity >= 19 and dpl.Quantity <= 24 then '1090x730x1000'
     WHEN dpl.Quantity >= 13 and dpl.Quantity <= 18 then '1090x720x790'
     WHEN dpl.Quantity >= 7 and dpl.Quantity <= 17 then '1090x720x570'
     WHEN dpl.Quantity >= 1 and dpl.Quantity <= 6 then '1090x720x350'
     ELSE 'Unkown'
   end as 'TOTAL VOLUME (MM3)'
 FROM    DropshipPackinglist dpl
 INNER JOIN HuaweiDescription hd ON dpl.ItemNumber = hd.ItemNumber
 WHERE   (dpl.BatchCode LIKE '%0005041007100AHWA11HG')
)
select *, sum([QTY]) over (partition by ss.[CASE NO.]) [TotalVolume]
from SuperSelect ss
  • 0
    Тип данных операнда varchar недопустим для оператора суммы.
  • 0
    Сумма @Crimsonland ([QTY])?
Показать ещё 2 комментария
0

Если вам нужна только одна строка для caseNumber, используйте

SELECT CaseNumber, Quantity, SUM(ItemNumber) TotalVolume 
FROM (...YourOriginalQuery...)
GROUP BY CaseNumber, Quantity

Если вам нужны все строки, но вы хотите также сообщить об итогах за номер дела, используйте следующий запрос:

SELECT CaseNumber, ItemNumber, Quantity,
                 SUM(ItemNumber) OVER(PARTITION BY CaseNumber) TotalVolume
    FROM   (SELECT DropshipPackinglist.CaseNumber, DropshipPackinglist.ItemNumber,
                                    DropshipPackinglist.Quantity,
                                    CASE
                                         WHEN DropshipPackinglist.Quantity >= 31
                                                    AND DropshipPackinglist.Quantity <= 36 THEN
                                            '1090x730x1460'
                                         WHEN DropshipPackinglist.Quantity >= 25
                                                    AND DropshipPackinglist.Quantity <= 30 THEN
                                            '1090x730x1230'
                                         WHEN DropshipPackinglist.Quantity >= 19
                                                    AND DropshipPackinglist.Quantity <= 24 THEN
                                            '1090x730x1000'
                                         WHEN DropshipPackinglist.Quantity >= 13
                                                    AND DropshipPackinglist.Quantity <= 18 THEN
                                            '1090x720x790'
                                         WHEN DropshipPackinglist.Quantity >= 7
                                                    AND DropshipPackinglist.Quantity <= 17 THEN
                                            '1090x720x570'
                                         WHEN DropshipPackinglist.Quantity >= 1
                                                    AND DropshipPackinglist.Quantity <= 6 THEN
                                            '1090x720x350'
                                         ELSE
                                            'Unkown'
                                    END AS 'TOTAL VOLUME (MM3)'
                     FROM   DropshipPackinglist
                     INNER  JOIN HuaweiDescription
                     ON     DropshipPackinglist.ItemNumber = HuaweiDescription.ItemNumber
                     WHERE  (DropshipPackinglist.BatchCode LIKE '%0005041007100AHWA11HG'))
  • 0
    Неверный синтаксис рядом с ')'.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню