Включить еще один столбец выбора на основе данных - MySQL - PullRequest
0 голосов
/ 03 марта 2019

Как включить SUM((pm.Quantity * bl.TotalQty)) AS NextBOMItemCount WHERE projectbomlist.ParentPartNum = bl.PartNum?

Данные не должны быть изменены, должны быть получены те же данные, однако должен быть включен дополнительный столбец.

VIEW: `NEWprojectBOMItemCount

select 
    `pm`.`ProjectCode` AS `ProjectCode`,
    `bl`.`PartNum` AS `PartNum`, 
    sum((`pm`.`Quantity` * `bl`.`TotalQty`)) AS `BOMItemCount`, 
    `bl`.`mp` AS `mp`, 
    `p`.`complete` AS `complete`, 
    `bl`.`RMInd` AS `RMInd`, 
    `bl`.`M_PartNum` AS `M_PartNum`
from 
    (
        (`projectmachine` `pm` join `projectbomlist` `bl`) 
        join `projects` `p`
    )
where 
    (
        (`pm`.`MachineListID` = `bl`.`MachineListID`)
        and (`pm`.`ProjectCode` = `bl`.`ProjectCode`)
        and (`pm`.`ProjectCode` = `p`.`ProjectCode`)
        and (`p`.`AfterProjectHeirarchyInd` = 'Y')
    )
    and and pm.ProjectCode = 'AB212323'
group by 
    `pm`.`ProjectCode` , 
    `bl`.`PartNum`
order by 
    `pm`.`ProjectCode` , 
    `bl`.`PartNum`

Или другой вариант. Пожалуйста, рассмотрите вид сверху, используемый в запросе ниже, пожалуйста, предложите изменения в запросе ниже, как показано выше (повторяется здесь)

`sum((pm.Quantity * bl.TotalQty)) AS NextBOMItemCount where projectbomlist.ParentPartNum = bl.PartNum` - in place of `(select-NextBOMItemCount)`?

Пожалуйста, см.PBLH.ParentPartNum - это столбец, который я должен сравнить с BL.ProjectCode, чтобы получить NextBOMItemCount value.

Запрос вызова QUERY: NEWprojectBOMItemCount

Select 
    BL.PartNum PartNumber, 
    PBLH.ParentPartNum NextBOM,  
    (select-NextBOMItemCount), 
    BOMItemCount TotalQty, 
    PL.Description, 
    BL.MP as PartType, 
    PL.Vendor, 
    PL.QBType  
from 
    NEWprojectBOMItemcount BL, 
    bomwiz.partslist PL, 
    bomwiz.projectbomlistheirarchy PBLH  
Where 
    BL.PartNum = PL.PartNum  
    And BL.PartNum = PBLH.PartNum  
    And BL.ProjectCode = PBLH.ProjectCode 
    And BL.projectCode = 'AB212323' 
Order By PartNumber

1 Ответ

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

Я думаю, что вы ищете условное агрегирование .Ваше требование может быть выражено следующим образом:

SUM(
    CASE WHEN blh.ParentPartNum = bl.PartNum 
        THEN pm.Quantity * bl.TotalQty 
        ELSE 0 
    END
) AS NextBOMItemCount

Позвольте мне указать другие проблемы с вашим запросом:

  • у вас есть нежелательные круглые скобки, и я с подозрениемсинтаксис JOIN s;вам нужно переместить условия в предложение ON соответствующего JOIN.

  • каждый неагрегированный столбец должен появиться в предложении GROUP BY - у вас там отсутствуют столбцы

  • обратные кавычки обычно не нужны

Вот обновленная версия запроса:

SELECT 
    pm.ProjectCode AS ProjectCode,
    bl.PartNum AS PartNum, 
    SUM(pm.Quantity * bl.TotalQty) AS BOMItemCount, 
    SUM(
        CASE WHEN blh.ParentPartNum = bl.PartNum 
            THEN pm.Quantity * bl.TotalQty 
            ELSE 0 
        END
    ) AS NextBOMItemCount,
    bl.mp AS mp, 
    p.complete AS complete, 
    bl.RMInd AS RMInd, 
    bl.M_PartNum AS M_PartNum
FROM 
    projectmachine AS pm 
    INNER JOIN projectbomlist AS bl 
        ON  pm.MachineListID = bl.MachineListID 
        AND pm.ProjectCode = bl.ProjectCode
    INNER JOIN join projects AS p 
        ON  pm.ProjectCode = p.ProjectCode 
        AND p.AfterProjectHeirarchyInd = 'Y'
    INNER JOIN projectbomlistheirarchy blh
        ON  bl.ProjectCode = blh.ProjectCode 
WHERE 
    pm.ProjectCode = 'AB212323'
GROUP BY 
    pm.ProjectCode, 
    bl.PartNum,
    bl.mp,
    p.complete,
    bl.RMInd, 
    bl.M_PartNum
ORDER BY 
    pm.ProjectCode, 
    bl.PartNum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...