SQL Server存储过程问题

SQL Server存储过程问题,sql,sql-server,Sql,Sql Server,在我的查询中,我有3个表goodsreceivenote,goodsreceivenoteDetail和TransferNote。在goodsreceivedtotedetails中,我接收产品,在转移单中,我转移产品 例如:我在2015年2月10日收到50公斤的产品名称salt,我在2015年2月10日10公斤和2015年2月12日25公斤将产品转移到另一个地点。我收到了1-3-15 100公斤的产品名盐。并于2015年5月3日将产品转移至另一地点,重量为50 kg。现在,我想求出(10-2-

在我的查询中,我有3个表
goodsreceivenote
goodsreceivenoteDetail
TransferNote
。在
goodsreceivedtotedetails
中,我接收产品,在转移单中,我转移产品

例如:我在2015年2月10日收到50公斤的产品名称salt,我在2015年2月10日10公斤和2015年2月12日25公斤将产品转移到另一个地点。我收到了1-3-15 100公斤的产品名盐。并于2015年5月3日将产品转移至另一地点,重量为50 kg。现在,我想求出(10-2-2015-31-2-2015)之间第一个grn中特定grn id(ie)的总转移数量之和

GoodsReceivedNote

GoodsReceivedNoteID | LocationID
     1              |      1
     2              |      1
Fromlocation |Tolocation|ProductID|TransferQuantity|CreatedOn|
 1              2             1       10|10-2-2015
 1              2             1       25 |12-2-2015
 1              2             1       50 |5-3-2015``
GoodsReceivedNoteDetail

GoodsReceivedNoteDetailID|GoodsReceivedNoteID|AcceptedQuantity|ProductID|CreatedON|
    1                     | 1                | 50 |  1  |10-2-2015
    2                     | 2                | 100|  1  |1-3-2015
TransferNote

GoodsReceivedNoteID | LocationID
     1              |      1
     2              |      1
Fromlocation |Tolocation|ProductID|TransferQuantity|CreatedOn|
 1              2             1       10|10-2-2015
 1              2             1       25 |12-2-2015
 1              2             1       50 |5-3-2015``
我的预期结果:

GoodsReceivedNoteID   
| LocationID | AcceptedQuantity | ProductID | CreatedOn | Fromlocation | Tolocation | ProductID | TransferQuantity
1  | 1   | 50   |   1 |  10-2-2015   |   1   |   2  |   1  |  35  |
2 | 2 | 100 | 1 | 1-3-15 | 1 | 2 | 1 | 50 |

查询:

SELECT DISTINCT
    [GRN].[GoodsReceivedNoteNo] ,
    [GRN].[LocationID] ,
    [GRN].[CreatedOn] ,
    [POD].[UnitPrice] AS [BasicRate] ,
    [POD].[VAT] ,
    [POD].[UnitPrice] * [GRND].[ReceivedQuantity] AS [CostofPurchase] ,
    [PO].[PurchaseOrderNo] ,
    [V].[VendorName] ,
    [GRN].[SupplierInvoiceNo] ,
    [GRN].[SupplierInvoiceDate] ,
    [SR].[LRNO] ,
    [T].[TransporterName] ,
    SUBSTRING([LPM].[BarCode], 4, 4) [Code] ,
    RIGHT([LPM].[BarCode], 6) [ProductCode] ,
    [P].[ProductName] ,
    [UT].[UnitTypeShortCode] ,
    CAST([GRND].[ReceivedQuantity] AS DECIMAL(18, 2)) AS [ReceivedQuantity] ,
    CAST([GRND].[RejectedQuantity] AS DECIMAL(18, 2)) AS [RejectedQuantity] ,
    CAST([GRND].[AcceptedQuantity] AS DECIMAL(18, 2)) AS [AcceptedQuantity] ,
    CAST([GRND].[UnitPrice] AS DECIMAL(18, 2)) AS [BasicRate] ,
    CAST(ISNULL(( [GRND].[UnitPrice] * [GRND].[ReceivedQuantity] ), 0.00) AS DECIMAL(18, 2)) [BasicValue] ,
    [GRND].[VAT] ,
    CASE WHEN COUNT([GRND].[GoodsReceivedNoteID]) OVER ( PARTITION BY [GRND].[GoodsReceivedNoteID] ) > 1
         THEN ISNULL(( [GRND].[FreightCharges] ), 0.00)
         ELSE ISNULL(( [OEC].[FreightCharges] ), 0.00)
    END [FreightApportioned] ,
    CASE WHEN COUNT([GRND].[GoodsReceivedNoteID]) OVER ( PARTITION BY [GRND].[GoodsReceivedNoteID] ) > 1
         THEN ISNULL(( [GRND].[LoadingCost] + [GRND].[UnloadingCost] ), 0.00)
         ELSE ISNULL(( [OEC].[LoadingCost] + [OEC].[UnloadingCost] ), 0.00)
    END [LoadingandUnloadingApportioned] ,
    CASE WHEN COUNT([GRND].[GoodsReceivedNoteID]) OVER ( PARTITION BY [GRND].[GoodsReceivedNoteID] ) > 1
         THEN ISNULL(( [GRND].[FreightCharges] ), 0.00) + ISNULL(( [GRND].[LoadingCost] + [GRND].[UnloadingCost] ), 0.00)
              + ISNULL(( [GRND].[UnitPrice] ), 0.00)
         ELSE ISNULL(( [OEC].[FreightCharges] ), 0.00) + ISNULL(( [OEC].[LoadingCost] + [OEC].[UnloadingCost] ), 0.00)
              + ISNULL(( [GRND].[UnitPrice] ), 0.00)
    END [TotalCost] ,
    [TN].[CreatedOn] ,
    [TN].[TransferQuantity] ,
    [TN].[Tolocation] ,
    [TN].[ProductID] ,
    [GRND].[ProductID] ,
    ( [TN].[TransferQuantity] * [TN].[UnitPrice] ) AS [VALUE] ,
    [L].[Location] ,
    [TN].[FreightCharge] ,
    ( [TN].[LoadingCharge] + [TN].[UnLoadingCharge] ) AS [LoadingandUnloadingCharges] ,
    ( [TN].[FreightCharge] + [TN].[LoadingCharge] + [TN].[UnLoadingCharge] ) AS [LoadingCost]
FROM    
    [GoodsReceivedNoteDetail] [GRND]
LEFT OUTER JOIN 
    [GoodsReceivedNote] [GRN] ON [GRN].[GoodsReceivedNoteID] = [GRND].[GoodsReceivedNoteID]
LEFT OUTER JOIN 
    [PurchaseOrder] [PO] ON [PO].[PurchaseOrderID] = [GRN].[PurchaseOrderID]
LEFT OUTER JOIN 
    [Vendor] [V] ON [V].[VendorID] = [PO].[VendorID]
LEFT OUTER JOIN 
    [SecurityRegister] [SR] ON [SR].[SecurityRegisterID] = [GRN].[SecurityRegisterID]
LEFT OUTER JOIN 
    [Transporter] [T] ON [T].[TransporterID] = [SR].[TransporterID]
LEFT OUTER JOIN 
    [OtherExpenseCost] [OEC] ON [OEC].[GoodsReceivedNoteID] = [GRN].[GoodsReceivedNoteID]
LEFT OUTER JOIN 
    [Product] [P] ON [P].[ProductID] = [GRND].[ProductID]
LEFT OUTER JOIN 
    [LocationProductMap] [LPM] ON [LPM].[ProductID] = [GRND].[ProductID]
LEFT OUTER JOIN 
    [UnitType] [UT] ON [UT].[UnitTypeID] = [P].[UnitTypeID]
LEFT OUTER JOIN 
    [PurchaseOrderDetail] [POD] ON [POD].[PurchaseOrderID] = [PO].[PurchaseOrderID]
LEFT OUTER JOIN 
    [TransferNote] [TN] ON [TN].[ProductID] = [GRND].[ProductID]
LEFT OUTER JOIN 
    [Locations] [L] ON [L].[LocationID] = [TN].[Tolocation]
WHERE   
    (@d_StartDate = ''
      OR CAST([GRND].[CreatedOn] AS DATE) >= @d_StartDate
      OR CAST([GRND].[CreatedOn] AS DATE) = @d_StartDate)
    AND (@d_EndDate = ''
          OR CAST([GRND].[CreatedOn] AS DATE) <= @d_EndDate)
    AND (@i_GrnStartNo = '0'
          OR [GRN].[GoodsReceivedNoteNo] >= @i_GrnStartNo)
    AND (@i_GrnEndNo = '0'
          OR [GRN].[GoodsReceivedNoteNo] <= @i_GrnEndNo)
    AND ([GRN].[LocationID] = @i_LocationID)  
    --AND CAST( GRND.CreatedOn AS DATE)=@d_StartDate 
选择DISTINCT
[GRN][GoodsReceivedNoteNo],
[GRN].[LocationID],
[GRN][CreatedOn],
[POD].[UnitPrice]作为[BasicRate],
[POD][VAT],
[POD].[单价]*[GRND].[ReceivedQuantity]作为[采购成本],
[PO]。[PurchaseOrderNo],
[五] [VendorName],
[GRN]。[SupplierInvoiceNo],
[GRN]。[SupplierInvoiceDate],
[SR].[LRNO],
[T] [TransporterName],
子字符串([LPM].[BarCode],4,4)[代码],
右([LPM].[BarCode],6)[ProductCode],
[P] [ProductName],
[UT].[UnitTypeShortCode],
将([GRND][ReceivedQuantity]转换为十进制(18,2))转换为[ReceivedQuantity],
将([GRND].[RejectedQuantity]转换为十进制(18,2))转换为[RejectedQuantity],
将([GRND][AcceptedQuantity]转换为十进制(18,2))转换为[AcceptedQuantity],
将([GRND].[UnitPrice]转换为十进制(18,2))转换为[BasicRate],
将(ISNULL(([GRND].[UnitPrice]*[GRND].[ReceivedQuantity]),0.00)转换为十进制(18,2))[BasicValue],
[GRND][VAT],
计数([GRND].[GoodsReceivedNoteID])超过(按[GRND].[GoodsReceivedNoteID]分区)大于1时的情况
然后是NULL(([GRND].[FreightCharges]),0.00)
ELSE为空(([OEC].[FreightCharges]),0.00)
完[运费分摊],
计数([GRND].[GoodsReceivedNoteID])超过(按[GRND].[GoodsReceivedNoteID]分区)大于1时的情况
然后是NULL([GRND].[LoadingCost]+[GRND].[UnloadingCost]),0.00)
ELSE为空(([OEC].[LoadingCost]+[OEC].[UnloadingCost]),0.00)
结束[装载和卸载比例],
计数([GRND].[GoodsReceivedNoteID])超过(按[GRND].[GoodsReceivedNoteID]分区)大于1时的情况
然后是NULL([GRND].[FreightCharges]),0.00)+ISNULL([GRND].[LoadingCost]+[GRND].[UnloadingCost]),0.00)
+ISNULL(([GRND].[UnitPrice]),0.00)
否则为空([OEC].[FreightCharges]),0.00)+ISNULL([OEC].[LoadingCost]+[OEC].[UnloadingCost]),0.00)
+ISNULL(([GRND].[UnitPrice]),0.00)
结束[总成本],
[TN][CreatedOn],
[TN].[TransferQuantity],
[TN][Tolocation],
[TN].[ProductID],
[GRND][ProductID],
([TN].[TransferQuantity]*[TN].[UnitPrice])作为[VALUE],
[五十] [地点],
[运费],
([TN].[LoadingCharge]+[TN].[UnLoadingCharge])作为[LoadingandUnloadingCharge],
([TN].[FreightCharge]+[TN].[LoadingCharge]+[TN].[UnLoadingCharge])作为[LoadingCost]
从…起
[GoodsReceivedNoteDetail][GRND]
左外连接
[GRN].[GoodsReceivedNote]=[GRND].[GoodsReceivedNoteID]上的[GoodsReceiveNote][GRN]
左外连接
[PO].[PurchaseOrderID]=[GRN].[PurchaseOrderID]上的[PurchaseOrder][PO]
左外连接
[V].[VendorID]=[PO].[VendorID]上的[Vendor][V]
左外连接
[SR].[SecurityRegisterID]=[GRN].[SecurityRegisterID]上的[SecurityRegister][SR]
左外连接
[T].[TransporterID]=[SR].[TransporterID]上的[Transporter][T]
左外连接
[OEC].[GoodsReceivedNoteID]=[GRN].[GoodsReceivedNoteID]上的[OtherExpenseCost][OEC]
左外连接
[P].[ProductID]=[GRND].[ProductID]上的[Product][P]
左外连接
[LPM].[ProductID]=[GRND].[ProductID]上的[LocationProductMap][LPM]
左外连接
[UT].[UnitTypeID]=[P].[UnitTypeID]上的[UnitType][UT]
左外连接
[POD].[PurchaseOrderID]=[PO].[PurchaseOrderID]上的[PurchaseOrderDetail][POD]
左外连接
[TN].[ProductID]=[GRND].[ProductID]上的[TransferNote][TN]
左外连接
[L].[LocationID]=[TN].[Tolocation]上的[Locations][L]
哪里
(@d_StartDate='')
或者施放([GRND].[CreatedOn]AS DATE)>=@d_StartDate
或铸造([GRND].[CreatedOn]AS DATE)=@d_StartDate)
和(@d_EndDate='')
或铸造([GRND][CreatedOn]AS DATE)=@i_GrnStartNo)
和(@i_GrnEndNo='0'

或者[GRN].[GoodsReceivedNoteNo]对此不完全清楚

(@d_StartDate = ''
  OR CAST([GRND].[CreatedOn] AS DATE) >= @d_StartDate
  OR CAST([GRND].[CreatedOn] AS DATE) = @d_StartDate)
第三部分是一个副本-将被上面的条件捕获

关于“我想根据特定grn的grn日期对传输数量求和”的问题,请澄清。您的WHERE条款中已经有日期标准,顶部没有任何金额的迹象,因此我不清楚您想要更改的内容和位置

SUM([TN].[TransferQuantity]) OVER (PARTITION BY GRN.LocationID)
例如,在select语句中,将保留日期选择条件,但会为该位置提供小计

SUM(CASE WHEN CAST( GRND.CreatedOn AS DATE)=@d_StartDate THEN [TN].[TransferQuantity] ELSE 0 END) OVER (PARTITION BY GRN.LocationID)

只有在提供日期的情况下,才会向您提供该位置id的小计。

请阅读常见问题解答如何提问(),到目前为止您做了什么?问题出在哪里?@Rocketq我想根据特定grn的grn日期对传输数量求和