2014-09-04 12 views
-1

我有兩個查詢,並希望將它們合併。我希望只有滿足特定條件才能執行第一個查詢,而第二個查詢則基於另一個條件執行,因此每次只能執行其中一個。最初這是一個SP,但我將其改爲查詢以便能夠輕鬆修改和處理錯誤。 這裏是查詢,我使用連接將它們組合在一起。如何執行特定的條件查詢

,因爲我會在一個報告中使用它們(帶參數水晶報表)


1查詢 在這裏,我需要把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 = {[email protected]} 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 = {[email protected]} 
+1

問題是什麼?您不需要IF,只需將您的參數添加到兩個WHERE子句中即可。 – 2014-09-04 12:29:27

+0

以及我需要如果指定最好的查詢應該運行,否則他們都將exicute和數據將來自兩個quieris – user3665959 2014-09-04 12:34:25

回答

0

僞代碼:

SELECT Query1 
WHERE Query1Condition = true 
UNION ALL 
SELECT Query2 
WHERE Query2Condition = true 

沒有如果需要的話,你只會得到你想要的查詢數據。

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 = {[email protected]} and 
    odrf.ObjType = 15 AND 
    {[email protected]} = 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 = {[email protected]} AND 
    {[email protected]} = YourSecondValue -- replace this with your data 
+0

thanx如此多的所有你們,我會嘗試你的解決方案,最好的問候 – user3665959 2014-09-04 12:46:28

+0

樂意幫助,請讓我們知道解決方案是否有效。 – AHiggins 2014-09-04 12:48:02