我搜索了SO和Google,但无法理解解释,也无法判断它们是否相关。
这是此报告的WHERE子句:
WHERE
(IC_ProductLots.ProductionDate >= { ts '2015-06-24 00:00:00' } AND (IC_ProductLots.ProductionDate <= { ts '2015-06-24 00:00:00' } OR IC_ProductLots.ProductionDate Is Null))
AND ((1=1) AND AR_Customers.CustomerKey IN (124) )
当用户开始运行报表时,WHERE子句会自动填充他们为生产日期输入的信息以及客户密钥。
对于此报告,我必须创建在set部分中调用的几个变量。这是一个例子:
SET @Shrink = @InputWeight - (
SELECT Sum([ICPL].[OriginalQuantity_Stk])
FROM IC_Products [PC]
INNER JOIN DC_Transactions [DCT]
ON [PC].ProductKey = [DCT].ProductKey
INNER JOIN AR_Customers
ON [DCT].CustomerKey = AR_Customers.CustomerKey
INNER JOIN IC_ProductLots [ICPL]
ON [DCT].LotKey = [ICPL].LotKey
LEFT OUTER JOIN IC_ProductCosts [ICP]
ON ICP.ProductKey=PC.ProductKey and ICP.ProductCostCode=5
WHERE (ICPL.ProductionDate >= { ts '2015-06-24 00:00:00' } AND (ICPL.ProductionDate <= { ts '2015-06-24 00:00:00' } OR ICPL.ProductionDate Is Null))
AND ((1=1) AND AR_Customers.CustomerKey IN (124))
);
对于SET区域中的这个WHERE子句,我需要WHERE子句来填充用户在运行报告时输入的生产日期和客户密钥。有没有办法做到这一点? 如果我需要提供更多解释,请告诉我。
我只使用SQL。 Microsoft SQL Server 2005.
答案 0 :(得分:1)
是的,您可以为要替换的特定值定义变量。假设这是您正在讨论的SQL Server,这将有效,但您必须知道,如果对于@key,以下将不适用于逗号分隔值,仅适用于单例值。如果需要逗号分隔值,则可能需要动态sql。我抓住了数据类型,根据需要修复。
declare @ts1 datetime,
@ts2 datetime,
@key int;
set @ts1 = '2015-06-24 00:00:00';
set @ts2 = '2015-06-24 00:00:00';
set @key = 124;
SET @Shrink = @InputWeight - (
SELECT Sum([ICPL].[OriginalQuantity_Stk])
FROM IC_Products [PC]
INNER JOIN DC_Transactions [DCT]
ON [PC].ProductKey = [DCT].ProductKey
INNER JOIN AR_Customers
ON [DCT].CustomerKey = AR_Customers.CustomerKey
INNER JOIN IC_ProductLots [ICPL]
ON [DCT].LotKey = [ICPL].LotKey
LEFT OUTER JOIN IC_ProductCosts [ICP]
ON ICP.ProductKey=PC.ProductKey and ICP.ProductCostCode=5
WHERE (ICPL.ProductionDate >= @ts1
AND (ICPL.ProductionDate <= @ts2
OR ICPL.ProductionDate Is Null))
AND ((1=1) AND AR_Customers.CustomerKey IN (@key))
);