SQL语句返回一行,但需要3行
我有一个返回1行的sql语句,但我需要返回3行。 Sql语句:SQL语句返回一行,但需要3行,sql,Sql,我有一个返回1行的sql语句,但我需要返回3行。 Sql语句: Select year, sales from store where year between BETWEEN EXTRACT(YEAR FROM sysdate)-2 and EXTRACT(YEAR FROM sysdate). 在某些情况下,我只能得到一年,我希望其他两年也返回0作为每次销售 有没有办法,我可以做到这一点?您可以拥有一个包含所有年份的表变量,并与“Store”表进行左联接。这样,若“存储”表中一年并没有记录
Select year, sales from store where year between BETWEEN
EXTRACT(YEAR FROM sysdate)-2 and EXTRACT(YEAR FROM sysdate).
在某些情况下,我只能得到一年,我希望其他两年也返回0作为每次销售
有没有办法,我可以做到这一点?您可以拥有一个包含所有年份的表变量,并与“Store”表进行左联接。这样,若“存储”表中一年并没有记录,那个么您将得到一个空值。然后,可以使用SQL函数ISNULL将NULL值替换为零。像这样的
DECLARE @years TABLE
(
year INT
)
INSERT INTO @years (year) VALUES (2015), (2014), (2013)
SELECT s.Year, ISNULL(Sales, 0)
FROM @years y
LEFT JOIN Store s ON s.year=y.year
WHERE ... -- your conditions
如果您没有未来的销售,您可以使用>=来代替,那么不需要在这两者之间进行切换。您可以创建一个包含所需年份的CTE,然后将其与sales表连接。即使没有销售,这也会给你带来麻烦
WITH CTE AS (
SELECT DISTINCT year from store WHERE year >= EXTRACT(YEAR FROM sysdate)-2
)
SELECT CTE.year, COALESCE(s.sales, 0) AS sales
FROM CTE
LEFT OUTER JOIN store s ON s.year = CTE.year
您没有说是哪个平台,所以我假设它支持派生表/内联视图或任何调用它们的东西
select y.year, coalesce(s.sales, 0) as sales
from
(select -2 union all select -1 union all select 0 as offset) as y
left outer join
store as s
on s.year = extract(year from sysdate) + y.offset
/* adding this next condition might help the optimizer */
and s.year >= extract(year from sysdate) - 2
你的桌子怎么摆好的?您是否查询相同的3年?它是什么类型的数据库?SQLServer、Oracle、MySQL、Postgres?如果是日期字段,还应将摘录添加到年份中。例如:选择年份,提取(从年到年)介于提取(从sysdate算起的年份)-2和提取(从sysdate算起的年份)之间的商店的销售额。