2017-06-13 72 views
0

我有一个名为lprPostcodeRegion的区域名称和区域ID。我想根据地区ID计算以下总和。例如,对于区域ID 1,我会得到一定的总和,对于区域ID 2,我会得到不同的总和,这发生在大约15个ID上。你可以看到我已经声明RegionID为1,因此,我只得到RegionID1的总和(lpr.regionID = 1/lpr.regionID = @RegionID)。我如何自动计算所有区域ID的总和?在Sql Server中使用变量

DECLARE @RegionID int; 
SET @RegionID = 1; 
SELECT lpr.RegionID, 
    --wc.whsHeaderID, 
SUM(c.[Chargeable Weight]) AS LeftOffWt 
FROM dbo.whsConsignment wc 
    INNER JOIN whsHeader wh on wh.WhsHeaderID = wc.whsHeaderID 
    INNER JOIN dbo.cgtConsignment c ON c.[Consignment Reference] = wc.ConsignmentReference 
    INNER JOIN dbo.genAddress ga ON ga.AddressID = c.Consignor 
    INNER JOIN dbo.lstPostcode lp ON lp.Postcode = ga.PostcodePrefix 
    INNER JOIN dbo.lstPostcodeRegion lpr ON lpr.RegionID = lp.RegionID 
       AND c.Cancelled = 0 
       --AND wc.ConsignmentReference LIKE '4%' 
       and lpr.RegionID = 1 
WHERE StatusCode IN ('NL') and wh.ArrDepDate between @StartDate and @EndDate 
GROUP BY lpr.RegionID 
+1

您的问题似乎与帖子标题不符。你是否在寻找一个接受变量并计算该记录总和的程序?或者你正在寻找一个总是会返回所有地区的总和的查询? –

+1

是不是你的查询在做什么? (如果你删除'和lpr.RegionID = 1'条件) – HoneyBadger

+1

由于你使用group by,我没有看到任何问题在你的代码中删除这个'和lpr.RegionID = 1',这样它就会得到所有的总和regionids – TheGameiswar

回答

0

- 肖恩·朗格是正确的,你不能JUSE不止一个值..我的错误 去院长IDE

SELECT lpr.RegionID, 
         --wc.whsHeaderID, 
         SUM(c.[Chargeable Weight]) AS LeftOffWt 
       FROM dbo.whsConsignment wc 
         INNER JOIN whsHeader wh on wh.WhsHeaderID = wc.whsHeaderID 
         INNER JOIN dbo.cgtConsignment c ON c.[Consignment Reference] = wc.ConsignmentReference 
         INNER JOIN dbo.genAddress ga ON ga.AddressID = c.Consignor 
         INNER JOIN dbo.lstPostcode lp ON lp.Postcode = ga.PostcodePrefix 
         INNER JOIN dbo.lstPostcodeRegion lpr ON lpr.RegionID = lp.RegionID 
                  AND c.Cancelled = 0 
                  --AND wc.ConsignmentReference LIKE '4%' 

       WHERE StatusCode IN ('NL') and wh.ArrDepDate between @StartDate and @EndDate 
       GROUP BY lpr.RegionID 
+0

这真的很有帮助!谢谢! –

+0

你不能使用这样的变量。这仅仅是一个可行的答案。 –

+0

戴安娜不这样做。 @RegionID的值是一个标量变量,它不能像本文提示的那样保存多个值。如果你想要超过1个区域,这不会为你工作。 –

1

只需卸下lpr.RegionID = 1。这里有一个例子:

SELECT lpr.RegionID, 
         --wc.whsHeaderID, 
         SUM(c.[Chargeable Weight]) AS LeftOffWt 
       FROM dbo.whsConsignment wc 
         INNER JOIN whsHeader wh on wh.WhsHeaderID = wc.whsHeaderID 
         INNER JOIN dbo.cgtConsignment c ON c.[Consignment Reference] = wc.ConsignmentReference 
         INNER JOIN dbo.genAddress ga ON ga.AddressID = c.Consignor 
         INNER JOIN dbo.lstPostcode lp ON lp.Postcode = ga.PostcodePrefix 
         INNER JOIN dbo.lstPostcodeRegion lpr ON lpr.RegionID = lp.RegionID 
                  AND c.Cancelled = 0 
                  --AND wc.ConsignmentReference LIKE '4%' 
       WHERE StatusCode IN ('NL') and wh.ArrDepDate between @StartDate and @EndDate 
       GROUP BY lpr.RegionID 
+0

谢谢Dean! –

相关问题