当一个表具有空值时连接数据

时间:2016-10-12 06:39:32

标签: sql sql-server join

我有两个表,我在日期列中将它们连接在一起。除了一个表缺少日期之外,这很有用。

即表2,我没有10.10.2016。我仍然希望这条线出现在结果中,因为这是我希望显示没有活动的一天。

这是一个酒吧:我有一张桌子,他们在啤酒水龙头上记录了点数,还有一张记录了已售出的点数。

如果他们有一天关闭,他们实际上并没有卖任何东西,但为了以防万一,他们仍然希望工作人员记录抽头啤酒的数量。

2016年10月10日的数据将是这样的:

表1(销售,未开放10.10 =根本没有存储数据)

Date Sold 10.08 22 10.09 31 10.11 54

表2(点击,他们每天计算=有数据10.10)

Date Tapped 10.08 23 10.09 31 10.10 0 10.11 54

我希望结果显示如下:

Date Tapped Sold Diff 10.08 23 22 1 10.09 31 31 0 10.10 0 0 0 10.11 54 54 0

但我不能让这个工作,因为当我加入表2时,它无法连接10.10中的“已售出”和“轻拍”,因为我没有办法加工它们。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

CREATE TABLE #A
(
DATE NUMERIC
(22,6),SOLD INT
)
INSERT INTO #A VALUES
(10.08,22), 
(10.09,31),
(10.11,54)

CREATE TABLE #B
(
DATE NUMERIC
(22,6),TAPPED INT
)

INSERT INTO #B VALUES              
(10.08,23),
(10.09,31),
(10.10,0),
(10.11,54)

SELECT A.DATE,A.TAPPED,ISNULL(B.SOLD,0)SOLD,A.TAPPED-ISNULL(B.SOLD,0) AS DIFFRENCE 
 FROM #B  A LEFT JOIN #A B ON  A.DATE=B.DATE

答案 1 :(得分:0)

使用leftright join

以下示例显示了如何使用RIGHT JOIN

SELECT t2.Date,t2.Tapped,ISNULL(t1.sold,0) sold,t2.Tapped-ISNULL(t1.sold,0) as Diff
FROM Table1 t1 
 RIGHT JOIN Table2  t2 
   ON t1.Date=t2.Date

答案 2 :(得分:0)

简单陈述

SELECT tapped.date as date, IFNULL(tapped.tapped,0) as tapped, IFNULL(sales.sold,0) as sold, IFNULL(tapped.tapped - sales.sold,0) as diff
FROM
tapped
LEFT OUTER JOIN sales ON sales.date = tapped.date
ORDER BY
tapped.date ASC