2014-02-27 5 views
1

현재 검색어 필드/열의 제목을 현재 연도로 지정하는 방법이 있습니까? 예를 들어 아래의 쿼리에서 필드 이름과 같은 ID는 TwoPriorYrs_sales 대신 sales2012가됩니다. 목적은 그 2015 년 월 1 일에 필드가 자동으로 뭔가 같은동적 열 이름 연도 별

(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)) 

감사를 할 수있는 방법이

(SELECT SUM(sales_dol) 
FROM dbo.sumsales 
WHERE (a.part_code = part_code) 
AND (YEAR(sale_date) = YEAR(GETDATE()) - 2)) AS TwoPriorYrs_sales 

sales2013이 될 것입니다 것입니다!

M.Ali? 동적 SQL을 여러 열이있는 쿼리에 넣을 수있는 위치는 어디입니까? 각 열을 개별적으로 선언해야합니까? 다음은 SQL 내가 지난 2 열에 연도를 넣어 찾고 있어요 :

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

결과 집합의 열 이름은 항상 SQL 쿼리에있는 정적 식별자의 이름입니다. 난 당신이 정말로 이런 게 필요하면, 당신은 동적 SQL을 (사용하여 SQL을 구성하고 다음 sp_executesql을 사용해야합니다) 생각합니다. 그런 말로, 나는 항상 그것을 스스로 피할 수있었습니다. M. Ali의 해결책을 참조하십시오. –

답변

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 
+0

응답 해 주셔서 감사합니다 M.Ali. 나는 이것이 정확히 내가 무엇을 찾고 있다고 생각한다. – user3362246

+0

문제는 당신이 지금 대답을 수락 할 수 :) @ user3362246 –

+0

물론 있습니다. 당신은 또한 내가 약간의 편집을했던 것에 따라 추가 지위와 함께 도울 수있다. 여기에 추가하는 방법을 찾지 못했습니다. – user3362246