2017-06-13 78 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! –

相關問題