1

我有一个表格显示文本中某些数据点的单词出现次数。这是一个简化的示例:

Word   Chapter   Count
dog    1         3
dog    2         7
dog    3         1
cat    2         4

请注意,在第 1 章和第 3 章中没有“猫”这一行,因为那里没有使用这个词。

我需要 SELECT INTO 临时表(为其他聚合等做准备)上述数据,但我需要“cat”以显示第 1 章和第 3 章,计数为 0。结果应该是:

Word   Chapter   Count
dog    1         3
dog    2         7
dog    3         1
cat    1         0
cat    2         4
cat    3         0

任何提示将不胜感激。谢谢。

4

4 回答 4

3

我不知道你的数据结构,但我认为你想要做的是:

create table Chapters (Chapter int);
insert Chapters values (1);
insert Chapters values (2);
insert Chapters values (3);

create table Words (Word varchar(50));
insert into Words values ('dog');
insert into Words values ('cat');

create table Chapters_Words (Word varchar(50), Chapter int, [Count] int);
insert into Chapters_Words values ('dog', 1, 3);
insert into Chapters_Words values ('dog', 2, 7);
insert into Chapters_Words values ('dog', 3, 1);
insert into Chapters_Words values ('cat', 2, 4);

select
    f.Word, 
    f.Chapter, 
    isnull(w.[Count], 0) [Count]
from
    Chapters_Words w
    right join (
        select w.Word, c.Chapter
        from Chapters c
        cross join Words w
    ) f on f.Chapter = w.Chapter and f.Word = w.Word

结果:

Word                                               Chapter     Count
-------------------------------------------------- ----------- -----------
dog                                                1           3
dog                                                2           7
dog                                                3           1
cat                                                1           0
cat                                                2           4
cat                                                3           0
于 2013-04-24T20:18:51.500 回答
1

Null 并不意味着零,“零”也不意味着 null。

叹...

话虽如此,“coalesce()”函数是一个流行的收藏夹,具体取决于您的 RDBMS 实现:COALESCE with NULL

另请参见SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数

于 2013-04-24T19:31:42.463 回答
0

取决于你在做什么?如果行退出,您可以使用外连接。在 Oracle 中,您可以 nvl() 将 null 更改为其他内容。例如,总和为零。

于 2013-04-24T19:34:01.050 回答
0

我相信你需要COALESCE

COALESCE(Count, 0) 

完整示例:

SELECT Word, Chapter, COALESCE(Count, 0)
FROM YourTable
于 2013-04-24T19:32:12.490 回答