我有两个问题,想要将它们组合起来。我希望第一个查询只在满足特定条件时执行,第二个查询根据另一个条件执行,因此每次只执行其中一个条件。最初这是一个SP,但我将其更改为查询,以便能够轻松地修改和处理错误。 以下是查询,我使用join将它们组合在一起。
我无法将它们分开,因为我会在一份报告中使用它们(带参数的水晶报告)
第一次查询 这里我需要放置一个if语句,其中包含一个将被声明为int的参数,如果参数值等于某个值,那么将执行此查询,并忽略第二个查询。如果它在这里不匹配,那么该值应该传递给第二个查询中的第二个if语句。
SELECT odrf.DocEntry, odrf.CntctCode,drf1.SubCatNum, odrf.Address2, drf1.LineNum, odrf.DocType, odrf.CANCELED, odrf.Handwrtten, odrf.DocStatus, odrf.Transfered, odrf.DocDate, odrf.DocDueDate,
odrf.CardCode, odrf.Printed, odrf.CardName, odrf.Address, odrf.NumAtCard, odrf.VatPercent, odrf.VatSum, odrf.VatSumFC, odrf.DiscPrcnt, odrf.DiscSumFC,
odrf.DiscSum, odrf.PaidToDate, odrf.DocTotalFC, odrf.DocTotal, odrf.DocRate, odrf.Comments, odrf.VatSumSy, odrf.DocTotalSy,odrf.NumAtCard, odrf.CreateDate, odrf.DocNum, drf1.U_LCCP,
odrf.TaxDate, drf1.ItemCode, drf1.Dscription, drf1.Price, drf1.DiscPrcnt AS Expr1, drf1.Rate, drf1.Quantity, drf1.StockSum, drf1.unitMsr, drf1.BaseDocNum,drf1.LineTotal, nnm1.seriesname
FROM odrf INNER JOIN
drf1 ON odrf.DocEntry = drf1.DocEntry
inner join nnm1 on odrf.series = nnm1.series
where ODRF.DocEntry = {?DocKey@} and odrf.ObjType = 15
UNION
第二次查询 这里我还需要输入一个if语句来检查参数(第一个查询中使用的相同参数)是否等于特定值。如果是,则执行此查询。
SELECT odln.DocEntry, odln.CntctCode,dln1.SubCatNum, odln.Address2, dln1.LineNum, odln.DocType, odln.CANCELED, odln.Handwrtten, odln.DocStatus, odln.Transfered, odln.DocDate, odln.DocDueDate,
odln.CardCode, odln.Printed, odln.CardName, odln.Address, odln.NumAtCard, odln.VatPercent, odln.VatSum, odln.VatSumFC, odln.DiscPrcnt, odln.DiscSumFC,
odln.DiscSum, odln.PaidToDate, odln.DocTotalFC, odln.DocTotal, odln.DocRate, odln.Comments, odln.VatSumSy, odln.DocTotalSy,ODLN.NumAtCard, odln.CreateDate, ODLN.DocNum, dln1.U_LCCP,
odln.TaxDate, dln1.ItemCode, dln1.Dscription, dln1.Price, dln1.DiscPrcnt AS Expr1, dln1.Rate, dln1.Quantity, dln1.StockSum, dln1.unitMsr, dln1.BaseDocNum,dln1.LineTotal, nnm1.seriesname
FROM odln INNER JOIN
dln1 ON odln.DocEntry = dln1.DocEntry
inner join nnm1 on odln.series = nnm1.series
where odln.DocEntry = {?DocKey@}
答案 0 :(得分:0)
伪代码:
SELECT Query1
WHERE Query1Condition = true
UNION ALL
SELECT Query2
WHERE Query2Condition = true
如果不需要,您只能从您想要的查询中获取数据。
答案 1 :(得分:0)
您不需要IF语句:您的UNION可以处理这个问题。见下文:
SELECT
odrf.DocEntry, odrf.CntctCode,drf1.SubCatNum, odrf.Address2, drf1.LineNum, odrf.DocType, odrf.CANCELED, odrf.Handwrtten, odrf.DocStatus, odrf.Transfered, odrf.DocDate, odrf.DocDueDate,
odrf.CardCode, odrf.Printed, odrf.CardName, odrf.Address, odrf.NumAtCard, odrf.VatPercent, odrf.VatSum, odrf.VatSumFC, odrf.DiscPrcnt, odrf.DiscSumFC,
odrf.DiscSum, odrf.PaidToDate, odrf.DocTotalFC, odrf.DocTotal, odrf.DocRate, odrf.Comments, odrf.VatSumSy, odrf.DocTotalSy,odrf.NumAtCard, odrf.CreateDate, odrf.DocNum, drf1.U_LCCP,
odrf.TaxDate, drf1.ItemCode, drf1.Dscription, drf1.Price, drf1.DiscPrcnt AS Expr1, drf1.Rate, drf1.Quantity, drf1.StockSum, drf1.unitMsr, drf1.BaseDocNum,drf1.LineTotal, nnm1.seriesname
FROM
odrf
INNER JOIN
drf1 ON
odrf.DocEntry = drf1.DocEntry
INNER JOIN
nnm1 ON
odrf.series = nnm1.series
WHERE
ODRF.DocEntry = {?DocKey@} and
odrf.ObjType = 15 AND
{?YourParam@} = YourFirstValue -- replace this with your data
UNION ALL
SELECT
odln.DocEntry, odln.CntctCode,dln1.SubCatNum, odln.Address2, dln1.LineNum, odln.DocType, odln.CANCELED, odln.Handwrtten, odln.DocStatus, odln.Transfered, odln.DocDate, odln.DocDueDate,
odln.CardCode, odln.Printed, odln.CardName, odln.Address, odln.NumAtCard, odln.VatPercent, odln.VatSum, odln.VatSumFC, odln.DiscPrcnt, odln.DiscSumFC,
odln.DiscSum, odln.PaidToDate, odln.DocTotalFC, odln.DocTotal, odln.DocRate, odln.Comments, odln.VatSumSy, odln.DocTotalSy,ODLN.NumAtCard, odln.CreateDate, ODLN.DocNum, dln1.U_LCCP,
odln.TaxDate, dln1.ItemCode, dln1.Dscription, dln1.Price, dln1.DiscPrcnt AS Expr1, dln1.Rate, dln1.Quantity, dln1.StockSum, dln1.unitMsr, dln1.BaseDocNum,dln1.LineTotal, nnm1.seriesname
FROM
odln
INNER JOIN
dln1 ON
odln.DocEntry = dln1.DocEntry
INNER JOIN
nnm1 ON
odln.series = nnm1.series
WHERE
odln.DocEntry = {?DocKey@} AND
{?YourParam@} = YourSecondValue -- replace this with your data