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中有数据时,记录即将到来.
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)