在SQL中为变量分配DISTINCT值

时间:2018-10-30 13:43:06

标签: sql-server

我有一个数据集,其中一个列为Transaction_Date,其日期从2005年到2018年不等。

我需要为变量分配不同的年份,稍后,我将在SQL Pivot中使用相同的变量。

@EnableScheduling
@EnableBatchProcessing
@SpringBootApplication
public class MyMain {

    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    private Job job;

    @Autowired
    private ApplicationArguments applicationArguments;


    public static void main(String[] args) throws Exception {
        SpringApplication.run(MyMain.class, args);
    }

    @Scheduled(cron = "0 00 05 * * ?")
    private void perform() throws Exception {
        String[] sourceArgs = applicationArguments.getSourceArgs();
        JobParameters jobParameters; // create job parameters from sourceArgs
        jobLauncher.run(job, jobParameters);
    }
}

这不是我预期的输出结果。请提出建议。

3 个答案:

答案 0 :(得分:2)

您需要FOR XML PATH()子句:

SELECT @PCOL = STUFF( (SELECT DISTINCT ', '+ QUOTENAME(CAST(YEAR(TRANSACTION_DATE) AS VARCHAR(255)))
                       FROM TRANSACTION_INFO
                       FOR XML PATH('')
                      ), 1, 1, ''
                    )

答案 1 :(得分:2)

之所以得到NULL,是因为在使用+=运算符之前没有将变量预先设置为空字符串。

NULL + 'some value' = NULL起,您的变量就永远不会从NULL更改为其他内容。

答案 2 :(得分:1)

这似乎是您要尝试做的...

IF OBJECT_ID('tempdb..#TRANSACTION_INFO', 'U') IS NOT NULL 
BEGIN DROP TABLE #TRANSACTION_INFO; END;

CREATE TABLE #TRANSACTION_INFO (
    TRANSACTION_DATE DATE
    );
INSERT #TRANSACTION_INFO (TRANSACTION_DATE) VALUES
    ('20130101'),('20130101'),('20140101'),
    ('20140102'),('20150102'),('20150102'),
    ('20160103'),('20160103'),('20170104'),
    ('20170104'),('20180105'),('20180105');

--================================================

DECLARE @POL VARCHAR(200) = '';

SELECT 
    @POL = CONCAT(@POL, ',', x.TD)
FROM (
    SELECT DISTINCT 
        TD = YEAR(ti.TRANSACTION_DATE)
    FROM
        #TRANSACTION_INFO ti
    ) x;

SET @POL = STUFF(@POL, 1, 1, '');

PRINT(@POL);

结果:

2013,2014,2015,2016,2017,2018