如何执行特定的条件查询

时间:2014-09-04 12:24:34

标签: sql sql-server crystal-reports

我有两个问题,想要将它们组合起来。我希望第一个查询只在满足特定条件时执行,第二个查询根据另一个条件执行,因此每次只执行其中一个条件。最初这是一个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@}

2 个答案:

答案 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
相关问题