2014-10-28 28 views
3

得到記錄,我有到SQL Server 2008頁的表如下如何從SQL

表A

ID   int   Not Null (primary ID) 
No   int   NULL 
Value  int   NULL 
Flag  nchar(10) NULL 

表B

ID   int   Not Null (primary ID) 
No   int   NULL 
Value  int   NULL 
Flag  nchar(10) NULL 

,我有以下數據表A

ID  No  Value Flag 
1  1  12  1   
2  1  12  1   
3  1  25  1   
4  2  120  1   
5  3  36  2   
6  2  120  2   
7  6  1  1   
8  2  10  1   
9  6  10  2   
10  1  25  2   
11  2  120  1   
當我寫如下語句

有表B中 沒有記錄

SELECT  dbo.A.No, SUM(dbo.A.Value) AS [IN], SUM(ISNULL(dbo.B.Value, 0)) AS OUT 
FROM   dbo.A LEFT OUTER JOIN 
         dbo.B ON dbo.A.NO = dbo.B.NO 
WHERE  (dbo.A.Flag = N'1') 
GROUP BY dbo.A.No 

我得到以下結果

No  IN  OUT 
1  49  0 
2  250  0 
6  1  0 

當我添加WHERE (dbo.A.Flag = N'1') AND (dbo.B.Flag = N'1')

什麼來了..

我的問題是如何從B表中獲取記錄爲0當B不是con tains記錄或找不到B.Id

更新: 當我在表B中的數據然後記錄即將到來。

+1

你在期待輸出什麼?標誌形式B以及? – SMA 2014-10-28 11:04:51

+0

'外部'表應該在連接中過濾,而不是在哪裏。 – 2014-10-28 11:33:35

回答

5

Imran,
我認爲以下sql會幫助你。

SELECT  A.No, 
      SUM(A.Value) AS [IN], 
      SUM(ISNULL(B.Value, 0)) AS [OUT] 
FROM  dbo.A A 
LEFT JOIN dbo.B B ON A.No = B.No AND B.Flag = N'1' 
WHERE  A.Flag = N'1' 
GROUP BY A.No 
+1

謝謝......它的工作......我在問題上錯了,所以我糾正了問題和答案 – 2014-10-28 13:23:18

-1

嘗試使用此條件: -

WHERE (dbo.A.Flag = N'1') AND (dbo.B.Flag = ISNULL(N'1',0)); 

這可能會對你有所幫助。