SQL Server存储过程问题
在我的查询中,我有3个表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-
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日期对传输数量求和