如何从SQL获取记录

时间:2014-10-28 11:00:01

标签: sql sql-server sql-server-2008 tsql

我必须使用SQL server 2008表格,如下所示

表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不包含记录或未找到B.Id

时,如何将表B中的记录设为0

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

2 个答案:

答案 0 :(得分:5)

姆兰,
我认为以下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 :(得分:-1)

尝试使用此条件: -

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

这可能对您有所帮助。