如何从SQL获取记录

Imr*_*han 3 sql t-sql sql-server sql-server-2008

我必须如下SQL Server 2008表

表A.

ID          int         Not Null (primary ID)
No          int         NULL
Value       int         NULL
Flag        nchar(10)   NULL
Run Code Online (Sandbox Code Playgroud)

表B.

ID          int         Not Null (primary ID)
No          int         NULL
Value       int         NULL
Flag        nchar(10)   NULL
Run Code Online (Sandbox Code Playgroud)

我在表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        
Run Code Online (Sandbox Code Playgroud)

当我写下面的陈述时,表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
Run Code Online (Sandbox Code Playgroud)

我的结果低于结果

No      IN      OUT
1       49       0
2       250      0
6       1        0
Run Code Online (Sandbox Code Playgroud)

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

什么都没有来......

我的问题是当B不包含记录或未找到B.Id时,如何将表B中的记录设为0

更新: 当我在表B中有数据时,记录即将到来.

Jit*_*aji 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
Run Code Online (Sandbox Code Playgroud)