gpt4 book ai didi

sql - 在 where in 子句中返回所有结果 (Sql Server)

转载 作者:行者123 更新时间:2023-12-01 10:49:08 24 4
gpt4 key购买 nike

我有如下表格:

Book        BookSales    Date
BookA $1 2013-03-04
BookB $2 2013-03-04
BookA $3 2013-03-05

......

我运行查询 -

select book,booksales,date 
from tblBook
where date>='03/03/2013'
and date<='03/05/2013'
and book in ('BookA','BookB')
order by date,book

现在返回结果如下

BookA     $1            2013-03-04
BookB $2 2013-03-04
BookA $3 2013-03-05

但我想要的是返回书 b 的空结果 ($0),如果它在该日期不存在,如下所示)。在这里,日期为 2013-03-05 的书 b 的记录不存在。

BookA     $1            2013-03-04
BookB $2 2013-03-04
BookA $3 2013-03-05
BookB $0 2013-03-05 <-- I want to include this record

我怎样才能做到这一点?如果无法通过这种方式实现,我还可以考虑其他什么方法?

最佳答案

一定有一种更简单的方法可以做到这一点,但这是我想出的方法。使用通用表表达式获取不同的日期列表和不同的书籍列表,然后对它们进行CROSS JOIN 以获得日期和书籍的完整矩阵。获得完整矩阵后,您可以OUTER JOIN 将您的表连接到它,用 0 替换任何空值。

交叉连接很快就会变得困惑,但如果它只是一个日期列表和书籍列表,它应该可以正常工作。

;with dates AS
(
select distinct date
from tblBook
), books AS
(
select distinct book
from tblBook
)
select b.book, coalesce(tb.booksales, 0), d.[date]
from dates as d
cross join books as b
left outer join tblBook as tb
on d.[date] = tb.[date]
and b.book = tb.book
where d.[date] >='03/03/2013'
and d.[date] <='03/05/2013'
and b.book in ('BookA','BookB')
order by d.[date], b.[book]

Working SQLFiddle here .

关于sql - 在 where in 子句中返回所有结果 (Sql Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com