2016-08-16 37 views
0

我有如下疑問,我想@BillCardName:結合2個查詢到一個當值的一個不爲0

DECLARE  
    @BillSet  int, 
    @BillCardName varchar(50) 

-- get @BillCardName from a table 1st 
SELECT @BillSet = BillSet, 
    @BillCardName = vInvBriefDesc 
FROM BillTableA 
    WHERE ID = 1234 

--If we have a iBillingSetID, we need the description from another table 
IF @BillSet <> 0 
BEGIN 
    SELECT @BillCardName = vBillDescription 
     FROM BillTableB 
    WHERE BillSet = @BillSet 
END 

我能寫上面,不知道如果上述可組合成一個查詢?

+0

即使您的問題得到解答,您可能需要檢查此問題以改善問題..https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question- on-a-public-forum/ – TheGameiswar

回答

1

LEFT JOIN表都和應用情況,檢查BillSet <> 0

SELECT BillCardName = CASE WHEN a.BillSet <> 0 
          THEN b.vBillDescription 
          ELSE a.vInvBriefDesc 
          END 
FROM BillTableA a 
     LEFT JOIN BillTableB b ON a.BillSet = b.BillSet 
WHERE a.ID = 1234 
+0

謝謝@Squirrel,我正在嘗試使用CASE,但不知道要與LEFT JOIN結合使用。 –

1

我想你的目標是什麼在這裏可以使用左(外)加入和​​3210來完成(返回給定序列中的第一個非空值)。

DECLARE  
    @BillSet  int, 
    @BillCardName varchar(50) 

SELECT @BillSet = bta.BillSet, 
    @BillCardName = coalesce (btb.vBillDescription, bta.vInvBriefDesc) 
FROM BillTableA as bta 
LEFT JOIN BillTableB as btb 
    ON bta.BillSet = btb.BillSet 
    --uncomment the line below if 0 is a valid value for BillSet in BillTableB 
    --AND bta.BillSet <> 0 
    WHERE bta.ID = 1234 
END