SQL、日历和主键
SQL, Calendar and Primary key
我目前陷入了一个 SQL 相关问题,希望能得到你们的帮助。
这是我的问题:
我有一个事实 table,DATE 列,B 和 C 是键,VALUE 是事实值。
我还有一个参考日历 table。
我想要的是,对于每个现有的元组 B-C,以及我日历的每个日期(即使这个日期没有事实,也检索一行。
例如,假设我有:
Calendar (DD-MM-YYYY)
01-01-2015
02-01-2015
03-01-2015
和事实
Date | B | C | VALUE
=============================
02-01-2015 | aa | xx | 10
02-01-2015 | aa | yy | 15
03-01-2015 | aa | xx | 10
我要:
01-01-2015 | aa | xx | 0
01-01-2015 | aa | yy | 0
02-01-2015 | aa | xx | 10
02-01-2015 | aa | yy | 15
03-01-2015 | aa | xx | 10
03-01-2015 | aa | yy | 0
我怎样才能有效地做到这一点?
在此先感谢您提供的任何帮助。
首先在 FACT
table
中创建具有 B
和 C
列唯一值的笛卡尔积 calendar
日期
然后 Outer join`` the result of first step with
fact` table 得到结果
尝试这样的事情
;WITH cte
AS (SELECT Ca.dates, C, B
FROM (SELECT DISTINCT C, B
FROM fact) A
CROSS JOIN calendar Ca)
SELECT A.dates,
A.B,
A.C,
Isnull(F.value,0) as value
FROM cte A
LEFT OUTER JOIN fact F
ON A.dates = f.dates
AND A.C = F.C
AND A.B = F.B
我目前陷入了一个 SQL 相关问题,希望能得到你们的帮助。 这是我的问题: 我有一个事实 table,DATE 列,B 和 C 是键,VALUE 是事实值。 我还有一个参考日历 table。 我想要的是,对于每个现有的元组 B-C,以及我日历的每个日期(即使这个日期没有事实,也检索一行。
例如,假设我有:
Calendar (DD-MM-YYYY)
01-01-2015
02-01-2015
03-01-2015
和事实
Date | B | C | VALUE
=============================
02-01-2015 | aa | xx | 10
02-01-2015 | aa | yy | 15
03-01-2015 | aa | xx | 10
我要:
01-01-2015 | aa | xx | 0
01-01-2015 | aa | yy | 0
02-01-2015 | aa | xx | 10
02-01-2015 | aa | yy | 15
03-01-2015 | aa | xx | 10
03-01-2015 | aa | yy | 0
我怎样才能有效地做到这一点?
在此先感谢您提供的任何帮助。
首先在 FACT
table
B
和 C
列唯一值的笛卡尔积 calendar
日期
然后 Outer join`` the result of first step with
fact` table 得到结果
尝试这样的事情
;WITH cte
AS (SELECT Ca.dates, C, B
FROM (SELECT DISTINCT C, B
FROM fact) A
CROSS JOIN calendar Ca)
SELECT A.dates,
A.B,
A.C,
Isnull(F.value,0) as value
FROM cte A
LEFT OUTER JOIN fact F
ON A.dates = f.dates
AND A.C = F.C
AND A.B = F.B