1

我正在尝试计算一个字段。例如

select **sum(New)** as NewCST where WHERE PO ='L22411301' AND ItemNo IN('1730','1343').

而不是总和,我有整个案例陈述来实现。我还没有做过有这么多条件的公式计算。所以任何帮助表示赞赏。

到目前为止,我得到了这个:

SELECT *
FROM (SELECT 
    Case
        When  PO_SIZE like ‘%lb%’ Then  CONVERT(decimal(13,4), NET_COST / TOTAL_WEIGHT)
        When PO_SIZE like ‘%LB%’ Then  CONVERT(decimal(13,4), NET_COST / TOTAL_WEIGHT)
        Else  CONVERT(decimal(13,4), ADJ_EXT_NET_COST / LINE_QUANTITY)        
from [FirstStrike_Retail].[custom].[Whse_Line_Item] )End AS NewCst.
WHERE PO ='L22411301' AND ItemNo IN('1730','1343')
4

3 回答 3

3

不需要外部 select 语句。此外,您需要在进入子句之前使用关键字关闭CASE语句。ENDFROM

这是您的代码的整理版本。

SELECT  Case    When PO_SIZE like ‘%lb%’ Then  CONVERT(decimal(13,4), NET_COST / TOTAL_WEIGHT)
                When PO_SIZE like ‘%LB%’ Then  CONVERT(decimal(13,4), NET_COST / TOTAL_WEIGHT)
                Else  CONVERT(decimal(13,4), ADJ_EXT_NET_COST / LINE_QUANTITY)
        End AS NewCst
from    [FirstStrike_Retail].[custom].[Whse_Line_Item] )
WHERE   PO ='L22411301' 
AND     ItemNo IN('1730','1343')
于 2013-09-06T17:35:14.573 回答
1

第一个解决方案肯定有语法错误。我想我的问题是你想要在行级别(declan_k)还是在分组级别(sonam)进行计算。

但是,上述代码(解决方案)中存在一些冗余。此外,PO_SIZE 的“Lb”将无法正确计算。

让我们玩得开心!

在做这些答案时,我总是喜欢创建一个示例数据库。

-- Sample table
CREATE TABLE #WHSE_LINE_ITEM
(
  ITEM_ID INT,
  PO_NUM VARCHAR(10),
  ITEM_NUM VARCHAR(10),
  NET_COST REAL,
  ADJ_EXT_NET_COST REAL,
  LINE_QUANTITY INT,
  TOTAL_WEIGHT REAL,
  PO_SIZE VARCHAR(10)
);

-- Sample data
INSERT INTO #WHSE_LINE_ITEM
VALUES
(1, 'L22411301', '1730', 200.00, 0.0, 3.0, 15.0, 'LB'),
(2, 'L22411301', '1730', 150.00, 0.0, 3.0, 30.0, 'lb'),
(3, 'L22411301', '1343', 100.00, 0.0, 4.0, 0.0, 'LN');

我在行级别进行了计算。我希望这就是你想要的。

-- Calculate field using case stmt
SELECT 
  CASE
    WHEN (LOWER(PO_SIZE) like '%lb%') THEN 
        CAST((NET_COST / TOTAL_WEIGHT) AS DECIMAL (13,4))
    ELSE
        CAST((NET_COST / LINE_QUANTITY) AS DECIMAL (13,4))
  END AS NEWCST, 
  *
FROM 
  #WHSE_LINE_ITEM
WHERE 
  PO_NUM = 'L22411301' AND 
  ITEM_NUM IN('1730','1343');

在查看代码时,我总是尝试将大小减小到最小。如果您正在测试磅的所有组合(Lb、lB、lb 或 LB),为什么不在模式匹配之前转换为小写字符串?

查询结果如下。

在此处输入图像描述

值得深思的是,如果您在一天中多次运行此查询,您可能希望拥有一个持久计算字段。

查看 2012 年的MSDN 条目。这将使引擎不必每次都计算字段,但会以将结果存储在磁盘上为代价。

于 2013-09-06T18:07:59.550 回答
0
select 
   sum(Case When  PO_SIZE like ‘%lb%’ Then  CONVERT(decimal(13,4), NET_COST / TOTAL_WEIGHT)
   When PO_SIZE like ‘%LB%’ Then  CONVERT(decimal(13,4), NET_COST / TOTAL_WEIGHT)
   Else  CONVERT(decimal(13,4), ADJ_EXT_NET_COST / LINE_QUANTITY)END)NewCst 
from 
   [FirstStrike_Retail].[custom].[Whse_Line_Item] 
WHERE 
   PO ='L22411301' AND ItemNo IN('1730','1343')
于 2013-09-06T17:40:03.510 回答