有没有办法根据当前年度标题我的查询字段/列?例如,在下面的查询中,id就像字段名称是sales2012而不是TwoPriorYrs_sales。目标是2015年1月1日该领域将自动成为sales2013
(SELECT SUM(sales_dol)
FROM dbo.sumsales
WHERE (a.part_code = part_code)
AND (YEAR(sale_date) = YEAR(GETDATE()) - 2)) AS TwoPriorYrs_sales
有没有办法做类似
的事情(SELECT SUM(sales_dol)
FROM dbo.sumsales
WHERE (a.part_code = part_code)
AND (YEAR(sale_date) = YEAR(GETDATE()) - 2)) AS ('sales'+ (YEAR(getdate())-2))
谢谢!
M.Ali? 我将动态sql放在具有多列的查询中?每列是否必须单独声明?以下是SQL,我希望将年份放在最后两列中:
SELECT a.cust_code, a.part_code, c.part_desc, c.part_status, c.part_ddate, c.part_dtype,
(SELECT SUM(qty_sold) AS Expr1
FROM dbo.sumsales AS b
WHERE (a.cust_code = cust_code) AND (a.part_code = part_code) AND (YEAR(sale_date) = YEAR(GETDATE()))) AS YTD_qty, ROUND
((SELECT SUM(sales_dol) AS Expr1
FROM dbo.sumsales AS b
WHERE (a.cust_code = cust_code) AND (a.part_code = part_code) AND (YEAR(sale_date) = YEAR(GETDATE()))), 2) AS YTD_sales,
(SELECT SUM(qty_sold) AS Expr1
FROM dbo.sumsales AS b
WHERE (a.cust_code = cust_code) AND (a.part_code = part_code) AND (YEAR(sale_date) = YEAR(GETDATE()) - 1) AND (sale_date <= DATEADD(Year, - 1,
GETDATE()))) AS YTDLastYr_qty, ROUND
((SELECT SUM(sales_dol) AS Expr1
FROM dbo.sumsales AS b
WHERE (a.cust_code = cust_code) AND (a.part_code = part_code) AND (YEAR(sale_date) = YEAR(GETDATE()) - 1) AND (sale_date <= DATEADD(Year, - 1,
GETDATE()))), 2) AS YTDLastYr_sales,
(SELECT SUM(qty_sold) AS Expr1
FROM dbo.sumsales AS b
WHERE (a.cust_code = cust_code) AND (a.part_code = part_code) AND (YEAR(sale_date) = YEAR(GETDATE()) - 1)) AS LastYr_qty, ROUND
((SELECT SUM(sales_dol) AS Expr1
FROM dbo.sumsales AS b
WHERE (a.cust_code = cust_code) AND (a.part_code = part_code) AND (YEAR(sale_date) = YEAR(GETDATE()) - 1)), 2) AS LastYr_sales,
(SELECT SUM(qty_sold) AS Expr1
FROM dbo.sumsales AS b
WHERE (a.cust_code = cust_code) AND (a.part_code = part_code) AND (YEAR(sale_date) = YEAR(GETDATE()) - 2)) AS TwoPriorYrs_qty, ROUND
((SELECT SUM(sales_dol) AS Expr1
FROM dbo.sumsales AS b
WHERE (a.cust_code = cust_code) AND (a.part_code = part_code) AND (YEAR(sale_date) = YEAR(GETDATE()) - 2)), 2) AS TwoPriorYrs_sales
FROM dbo.sumsales AS a INNER JOIN
dbo.partmstr AS c ON a.part_code = c.part_code INNER JOIN
dbo.orderfrom AS d ON a.cust_code = d.cust_code
WHERE (YEAR(a.sale_date) >= YEAR(GETDATE()) - 2)
GROUP BY a.cust_code, a.part_code, c.part_desc, c.part_status, c.part_ddate, c.part_dtype
答案 0 :(得分:1)
如果你想动态设置列名,你必须使用像这样的动态sql来做...
DECLARE @Sql NVARCHAR(MAX);
DECLARE @Column_Alias NVARCHAR(MAX);
SET @Column_Alias = 'Year'+ CAST(YEAR(GETDATE())-2 AS NVARCHAR);
SET @Sql = N'SELECT SUM(sales_dol) AS ' + @Column_Alias +
N'FROM dbo.sumsales
WHERE a.part_code = part_code
AND YEAR(sale_date) = YEAR(GETDATE())-2'
EXECUTE sp_executesql @Sql