使用月份交叉连接的条件
Using a condition for cross join on months
Table 1 有列日期,值
Table 2 有 monthnumber , monthname (即 1-12 为数字和 Jan - Dec)
示例数据
|Table 1|
|ColDate | value|
|1-nov-2016 | 6|
预期输出
ColDate | value | month | monthnumber
1-nov-2016 | 6 | Nov | 11
1-nov-2016 | 0 | Dec |12
..... 除 Nov
以外的所有其他月份均为 0
我在 table 1 和 table 2 之间使用了 cross join
但它给出的输出为
1-nov-2016 | 6 | Nov | 11
1-nov-2016 | 6 | Dec |12
..... 所有其他月份为 6,但除 11 月外应为 0
我该怎么做?
试试这个,
DECLARE @TB1 TABLE (COLDATE VARCHAR(20),VALUE INT)
INSERT INTO @TB1
SELECT '1-NOV-2016',6
DECLARE @TB2 TABLE(MONTH VARCHAR(10),MONTHNUMBER INT)
INSERT INTO @TB2
SELECT 'NOV',11
UNION ALL
SELECT 'DEC',12
SELECT COLDATE
,CASE WHEN MONTHNUMBER=11 THEN VALUE ELSE 0 END VALUE
,MONTH
,MONTHNUMBER
FROM @TB1
CROSS JOIN @TB2
结果:
Table 1 有列日期,值 Table 2 有 monthnumber , monthname (即 1-12 为数字和 Jan - Dec) 示例数据
|Table 1|
|ColDate | value|
|1-nov-2016 | 6|
预期输出
ColDate | value | month | monthnumber
1-nov-2016 | 6 | Nov | 11
1-nov-2016 | 0 | Dec |12
..... 除 Nov
以外的所有其他月份均为 0我在 table 1 和 table 2 之间使用了 cross join
但它给出的输出为
1-nov-2016 | 6 | Nov | 11
1-nov-2016 | 6 | Dec |12
..... 所有其他月份为 6,但除 11 月外应为 0
我该怎么做?
试试这个,
DECLARE @TB1 TABLE (COLDATE VARCHAR(20),VALUE INT)
INSERT INTO @TB1
SELECT '1-NOV-2016',6
DECLARE @TB2 TABLE(MONTH VARCHAR(10),MONTHNUMBER INT)
INSERT INTO @TB2
SELECT 'NOV',11
UNION ALL
SELECT 'DEC',12
SELECT COLDATE
,CASE WHEN MONTHNUMBER=11 THEN VALUE ELSE 0 END VALUE
,MONTH
,MONTHNUMBER
FROM @TB1
CROSS JOIN @TB2
结果: