0

ここに私のSQLがあります:

-- Order information
SELECT ISNULL(p.PaymentAmt, 0) AS PaymentAmt, o.TaxAmt, o.PostAmount, o.OrderDate, o.PublicNotes, u.userid, PostAmount + TaxAmt AS Total, PostAmount - PaymentAmt AS Due
FROM Orders o 
INNER JOIN Payment p ON p.OrderID = o.OrderID
INNER JOIN Users u  ON o.EnteredBy = u.UserKey
Where o.OrderID = 5267

現在、この特定の OrderID では、列ヘッダーだけで 0 行が返されます。これを強制的に値に 0 を返し、残りに空の文字列を返す方法はありますか?

4

2 に答える 2

5

望ましい結果が得られるはずです:

WITH CTE1 AS (SELECT ISNULL(p.PaymentAmt, 0) AS PaymentAmt, o.TaxAmt, o.PostAmount,  
   o.OrderDate, o.PublicNotes, u.userid, PostAmount + TaxAmt AS Total, PostAmount -    
    PaymentAmt AS Due 
    FROM Orders o  
    INNER JOIN Payment p ON p.OrderID = o.OrderID 
    INNER JOIN Users u  ON o.EnteredBy = u.UserKey 
    Where o.OrderID = 5267 
    AND o.EnteredBy = u.UserKey )
SELECT CTE1.*
FROM CTE1
UNION ALL
SELECT 0,0, NULL,NULL,NULL,NULL,NULL
WHERE NOT EXISTS (SELECT 1 FROM CTE1)
于 2012-05-01T22:01:37.640 に答える
2

別の方法:

SELECT ISNULL(p.PaymentAmt, 0) AS PaymentAmt, o.TaxAmt, o.PostAmount, 
       o.OrderDate, o.PublicNotes, u.userid, 
       PostAmount + TaxAmt AS Total, PostAmount - PaymentAmt AS Due
FROM Orders o 
  INNER JOIN Payment p ON  p.OrderID = o.OrderID
                       AND o.OrderID = 5267        --- condition moved here
  INNER JOIN Users u  ON o.EnteredBy = u.UserKey
  RIGHT JOIN (SELECT 1 dummy) trick ON 1=1         --- this line was added

---  AND o.EnteredBy = u.UserKey                   --- this is redundant
于 2012-05-01T22:14:26.560 に答える