【问题标题】:Split SQL Query by Year/Month按年/月拆分 SQL 查询
【发布时间】:2012-08-13 15:40:10
【问题描述】:

我编写了一个 SQL 查询,用于填充临时表中的以下列:

CODE | MODULE | MONTH | YEAR | SO_NUM | LABOR_HRS | LABOR_COST

从这个表中,我需要创建一个返回相同数据的选择语句,按月份拆分,如下所示:

CODE | MODULE | SO_NUM_MONTH1 | LABOR_HRS_MONTH1 | LABOR_COST_MONTH1 | SO_NUM_MONTH2 | LABOR_HRS_MONTH2 | LABOR_COST_MONTH2 | etc...

如您所见,代码和模块不会随月份变化。临时表中总会有六个月的数据。然而,让我明白的是,月份并不总是从 1 开始(月份和年份都是整数)。

我还希望根据月份和年份来命名结果列,因此在上面的示例中,假设数据从 2011 年 1 月开始,名称可能是:

CODE | MODULE | SO_NUM_JAN_2011 | LABOR_HRS_JAN_2011 | LABOR_COST_JAN_2011 | SO_NUM_FEB_2011 | LABOR_HRS_FEB_2011 | LABOR_COST_FEB_2011 | etc...

此项目正在 SQL Server 2008 R2 中开发。

【问题讨论】:

  • 你真的需要这样命名的列吗?或者你可以做类似“5 个月前”、“4 个月前”之类的内容吗?

标签: sql sql-server-2008 tsql reporting-services


【解决方案1】:

这里有一些代码可以帮助您入门。基本上,它会创建一个包含您需要的字段的表,您可以删除它并根据需要重新创建它。您需要完成将其余字段添加到动态 SQL 部分 (@CreateTable),然后您需要构建一些插入和更新查询来填充它。我会使用一些动态 sql,就像我用来创建表的那样来执行这些操作,以便您从变量中获取字段名称。

DECLARE @Month1 VARCHAR(15),
@Month2 VARCHAR(15),
@Month3 VARCHAR(15),
@Month4 VARCHAR(15),
@Month5 VARCHAR(15),
@Month6 VARCHAR(15),
@Year VARCHAR(4)

SELECT @Year = Year(GetDate())

SELECT @Month1 = LEFT(DateName(mm,DateAdd(mm,-6,GetDate())),3) + '_' + @Year, 
@Month2 = LEFT(DateName(mm,DateAdd(mm,-5,GetDate())),3) + '_' + @Year,
@Month3 = LEFT(DateName(mm,DateAdd(mm,-4,GetDate())),3) + '_' + @Year,
@Month4 = LEFT(DateName(mm,DateAdd(mm,-3,GetDate())),3) + '_' + @Year,
@Month5 = LEFT(DateName(mm,DateAdd(mm,-2,GetDate())),3) + '_' + @Year,
@Month6 = LEFT(DateName(mm,DateAdd(mm,-1,GetDate())),3) + '_' + @Year

PRINT @Month1
PRINT @Month2
PRINT @Month3
PRINT @Month4
PRINT @Month5
PRINT @Month6

DECLARE @CreateTable VARCHAR(MAX)

SELECT @CreateTable = 'CREATE TABLE tblTESTING (
    CODE VARCHAR(10),
    MODULE VARCHAR(10),
    SO_NUM_' + @Month1 + ' VARCHAR(10),
    LABOR_HOURS_' + @Month1 + ' VARCHAR(10),
    LABOR_COST_' + @Month1 + ' VARCHAR(10)
    )'

PRINT ''    
PRINT @CreateTable

--DROP TABLE tblTesting

EXECUTE(@CreateTable)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多