在几个月

时间:2017-02-22 05:51:00

标签: sql-server date cross-join

表1列有日期,值 表2有月份号,月份名(即数字为1-12,月 - 12月) 样本数据

|表1 |

|ColDate | value|
|1-nov-2016 | 6|

预期产出

ColDate | value | month | monthnumber
1-nov-2016 | 6 | Nov | 11
1-nov-2016 | 0 | Dec |12

..... 0除了11月以外的所有其他月份

我在表1和表2之间使用了cross join,但是输出为

1-nov-2016 | 6 | Nov | 11
1-nov-2016 | 6 | Dec |12

..... 6所有其他月份虽然应该是0,除了11月。

我该怎么做?

1 个答案:

答案 0 :(得分: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

结果:

enter image description here