【问题标题】:SQL Divide a field IfSQL 分割一个字段 If
【发布时间】:2019-11-07 11:56:52
【问题描述】:

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

这是我的查询:

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

【问题讨论】:

  • 你的输入和预期输出是什么?
  • SQL Server MtySQL。您真正在使用什么 RDBMS?
  • 你在哪里存储 RAM 棒的数量?好像只是MIN(AA.StkActual) / (RamSticks*1.0)
  • 另外,为什么所有这些 OR 子句而不是 IN 表达式 (A2.Familia IN (37.38.39.45.98))?
  • @xXx 看来 Gordon 给了我解决方案,无论如何谢谢大家!

标签: sql divide


【解决方案1】:

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

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
. . .

【讨论】:

  • 检查点!谢谢 Gordon,我一直在为这个查询苦苦挣扎,瞧,你解决了!
  • 我还有一个问题 Gordon,我想你可能知道如何帮助我.... 当组件来自 A2.Familia = 98 时,我希望它只获得一个 AA 的股票价值.Armazem。想象一下 AA.Armazem 'A7' 有 150 种产品,A8 有 0 种,A9 有 8 种产品 我怎么能先考虑 A7,然后是 A8,然后是 A9?我只希望它得到 1 个 AA.Armazem 的存货,然后如果那个为 0,则切换到另一个。在这种情况下,如果 A7 = 0,A8= 0,那么它将考虑 A9 的 stockValue,否则,我希望它考虑 AA.Armazem A7 库存,因为它仍然有单位
  • @TiagoCosta。 . .我想你应该问另一个问题。
  • 是的,你说得对,我就是这么做的。如果可能的话,检查一下。我不会在这里发布链接,因为我不知道我是否应该这样做,所以我想你可以在我的个人资料中看到它。感谢戈登的帮助。
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2015-07-18
  • 2019-03-14
相关资源
最近更新 更多