首页 > 解决方案 > SQL 分割一个字段 If

问题描述

我正在尝试构建一个查询以从文章中获取 X 组件的最低库存。想象一台计算机,它有内存、主板等。我可以很容易地得到最小组件数量,但是,我们通常在我们要构建的计算机中放置 2 个 RAM,所以,我希望查询得到 RAM 的 StockValue /2。

这是我的查询:

SELECT A1.Artigo AS Artigo,
       A1.Descricao AS Descricao,
       MIN(AA.StkActual) AS Stock,
       0 AS QuantidadeEmEncomendasPendentes,
       'Componente Stock' AS Id
FROM Artigo A1
     INNER JOIN ComponentesArtigos CA ON CA.ArtigoComposto = A1.Artigo
     INNER JOIN Artigo A2 ON A2.Artigo = CA.Componente
                         AND (A2.Familia = 98
                           OR A2.Familia = 45
                           OR A2.Familia = 39
                           OR A2.Familia = 37
                           OR A2.Familia = 38)
     INNER JOIN ArtigoArmazem AA ON AA.Artigo = A2.Artigo
                                AND AA.Armazem = 'A7'
GROUP BY A1.Artigo,
         A1.Descricao
HAVING A1.Artigo = '0180005132';

您需要知道的事情: min(AA.StkActual) 是我正在谈论的 StockValue。RAM 由家族定义 (A2.Familia = 39)

我不想将查询结果除以 2,我想将 family = 39 的组件/文章的库存除以 2

标签: sqldivide

解决方案


如果我理解正确,您需要一个有条件的最小值:

SELECT A1.Artigo AS Artigo,
       A1.Descricao AS Descricao,
       MIN(CASE WHEN A2.familia = 38 THEN AA.StkActual / 2 ELSE AA.StkActual END) AS Stock,
       0 AS QuantidadeEmEncomendasPendentes,
       'Componente Stock' AS Id
. . .

推荐阅读