重写SQL而不重复参数
我已经编写了下面的查询,但现在我想改进代码,最终的要求是不要重复任何参数两次。有没有一种方法可以在不影响逻辑的情况下重写此sql查询而不重复Flag1和Flag2参数重写SQL而不重复参数,sql,Sql,我已经编写了下面的查询,但现在我想改进代码,最终的要求是不要重复任何参数两次。有没有一种方法可以在不影响逻辑的情况下重写此sql查询而不重复Flag1和Flag2参数 SELECT CASE WHEN @PARAM1 = 'REV' THEN SUM(NET_INVOICE_REVENUE) ELSE SUM(QUANTITY) END VAL FROM PA_TRANS TR JOIN PA_SOLD_TO CUST ON TR.SOLD_TO_CUSTOMER = CU
SELECT
CASE WHEN @PARAM1 = 'REV' THEN SUM(NET_INVOICE_REVENUE) ELSE SUM(QUANTITY) END VAL
FROM
PA_TRANS TR
JOIN
PA_SOLD_TO CUST
ON
TR.SOLD_TO_CUSTOMER = CUST.SOLD_TO_CUSTOMER
WHERE
AGREEMENT_NBR = @AGREEMENT_CSV
AND
PART_NUMBER = @PART_NUMBER
AND
CUST.WW_CORP = CASE WHEN (@FLAG1 = 'N' AND @FLAG2 ='N') THEN @WW_CORP ELSE CUST.WW_CORP END
AND
CUST.WW_AFFLIATE = CASE WHEN (@FLAG1 = 'N' AND @FLAG2 ='Y') THEN @WW_AFFLIATE ELSE CUST.WW_AFFLIATE END
AND
( DAY >= @A_START_DATE AND DAY < @A_END_DATE)
谢谢。
Mayurika如果只想提及一次参数,可以使用CTE或子查询。以下是子查询表单:
SELECT (CASE WHEN p_PARAM1 = 'REV' THEN SUM(NET_INVOICE_REVENUE) ELSE SUM(QUANTITY)
END) as VAL
FROM (select @PARAM1 as p_param1, @AGREEMENT_CSV as p_AGREEMENT_CSV,
@PART_NUMBER as p_PART_NUMBER, @FLAG1 as p_FLAG1, @FLAG2 as p_FLAG2,
@A_START_DATE as p_A_START_DATE, @A_END_DATE as p_A_END_DATE
) params CROSS JOIN
PA_TRANS TR JOIN
PA_SOLD_TO CUST
ON TR.SOLD_TO_CUSTOMER = CUST.SOLD_TO_CUSTOMER
WHERE AGREEMENT_NBR = p_AGREEMENT_CSV AND
PART_NUMBER = p_PART_NUMBER AND
CUST.WW_CORP = CASE WHEN (p_FLAG1 = 'N' AND p_FLAG2 ='N') THEN @WW_CORP ELSE CUST.WW_CORP END AND
CUST.WW_AFFLIATE = CASE WHEN (p_FLAG1 = 'N' AND p_FLAG2 ='Y') THEN @WW_AFFLIATE ELSE CUST.WW_AFFLIATE END AND
( DAY >= p_A_START_DATE AND DAY < p_A_END_DATE);
此问题似乎与主题无关,因为它是关于。您可以在子查询中使用FLAG1和FLAG2。。。。但是出于好奇,有两次有什么问题?有很多方法可以做到,但在这个例子中它们并不真正值得做。您不想重复这些参数的原因是什么?您使用的是什么数据库?谢谢大家。我在一个xml文件中使用这个查询,这个文件标识了什么?将符号标记为参数。我无法用名称映射此文件中传递的参数。每个默认情况下,mark在脚本中按顺序映射到我要传递的参数。谢谢Gordon。它解决了我的问题。