我有一个数据集,其中一个列为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);
}
}
这不是我预期的输出结果。请提出建议。
答案 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