1

我有以下查询....

SELECT  NGPCostPosition.ProjectNo, NGPCostPosition.CostCat, 
        NGPCostPosition.DocumentNumber, NGPCostPosition.TransactionDate, 
        NGPCostPosition.UnitCost, NGPCostPosition.TotalCost, 
        NGPCostPosition.CreditorEmployeeName, NGPCostPosition.SummaryCostCat, 
        PurchaseNGP_PL.CalculatedCost,
CASE
    WHEN
        DATEPART(MONTH, NGPCostPosition.TransactionDate) = DATEPART(MONTH, GETDATE())  
        AND
        DATEPART(YEAR, NGPCostPosition.TransactionDate) = DATEPART(YEAR, GETDATE())
    THEN TotalCost
    ELSE 0
END AS CurrentMonthCost2

FROM  NGPCostPosition INNER JOIN
      PurchaseNGP_PL 
        ON  NGPCostPosition.ProjectNo = PurchaseNGP_PL.PAPROJNUMBER 
        AND NGPCostPosition.DocumentNumber = PurchaseNGP_PL.DocumentNumber 
        AND NGPCostPosition.SummaryCostCat = PurchaseNGP_PL.SummaryCostCat
WHERE NGPCostPosition.ProjectNo = @ProjectNumber 
AND   CostCat ='P070' 
OR    CostCat ='P080' 
AND   NGPCostPosition.ProjectNo = @ProjectNumber 
AND   NGPCostPosition.TotalCost = ABS(PurchaseNGP_PL.CalculatedCost) 

GROUP BY NGPCostPosition.ProjectNo, 
         NGPCostPosition.CostCat, 
         NGPCostPosition.DocumentNumber, 
         NGPCostPosition.TransactionDate,
         NGPCostPosition.UnitCost,
         NGPCostPosition.TotalCost, 
         NGPCostPosition.CreditorEmployeeName,
         NGPCostPosition.SummaryCostCat, 
         PurchaseNGP_PL.CalculatedCost

这给了我以下结果......

在此处输入图像描述

我想要做的是将“ProjectNo”列限制为仅前 5 个数字。(例如 12169)

有人可以建议这是否可行,最好的方法是什么?

4

3 回答 3

3

你可以做:

SELECT LEFT(NGPCostPosition.ProjectNo, 5) TruncatedProjectNumber, ....

然后更改您的分组以使用TruncatedProjectNumber

于 2013-05-01T14:13:21.373 回答
1

如果这是常规操作,则要么创建视图,要么使用计算列(在此处记录)。

正如评论中所指出的,获取前五个字符的好方法是使用该left()函数。

于 2013-05-01T14:12:23.410 回答
1

以空间为代价,您可以将前五位数字提供到单独的列中。如果你不想使用额外的空间,你可以尝试这样的事情:

SELECT CAST(LEFT(CAST(first_five AS VARCHAR(5)), 5) AS INT)

上面所做的是将您的数字转换为 a varchar,在其上发出一个子字符串函数,然后varchar将这些5数字转换回 int。这可能是一项昂贵的操作,具体取决于您执行它的频率。话虽如此,将此值存储在单独的列中可能符合您的最大利益,因此您可以避免每次调用都重新计算它。

于 2013-05-01T14:07:48.273 回答