使用日期作为具有开始日期列的表的行创建表

时间:2015-03-13 10:28:07

标签: sql sql-server tsql sql-server-2012 database-administration

很抱歉复杂的标题,但这是我的问题:

我有一张表,其中包含有关工厂生产的数据。每个工厂都有两个关于每种产品的生产损失的产品和专栏。工厂还有一个状态,其中1表示一切正常,工厂正在全面生产(GrossProduction),2个生产限制和3个工厂维护时。

ID | FactoryID | Status |    StartTimestamp     | ProductionLoss1 | ProductionLoss2 | GrossProduction1 | GrossProction2
1  |    100    |   1    |2015-01-05 12:15:00.000|        0        |        0        |        100       |        150       
2  |    200    |   1    |2015-01-03 12:15:00.000|        0        |        0        |        40        |        90 
3  |    100    |   2    |2015-01-29 10:00:00.000|        80       |        100      |        100       |        150    
4  |    100    |   1    |2015-02-03 08:00:00.000|        0        |        0        |        100       |        150   
5  |    200    |   2    |2015-02-05 08:00:00.000|        100      |        150      |        40        |        90  
6  |    200    |   3    |2015-02-06 00:00:00.000|        100      |        150      |        40        |        90  
.
.
.

我必须将此表更改为另一个表,其中每个日期都有自己的行和相应的作品以及所有产品的丢失作品。

计算生产:

生产日= 24 * GrossProction - LostProduction - LostProductionDueMaintenance

LostProduction =如果状态== 2那么24 * ProductionLoss

LostProductionDueMaintenance =如果状态== 3那么24 * ProductionLoss

输出表应该是这样的:

所有工厂的每个日期和相应的生产数量应该有一行。

DateKey    |FactoryID| Production1 | ProductionLoss2 | LostProduction1 | LostProduction2 | LostProductionDueMaintenance1 | LostProductionDueMaintenance2
2015-01-05 |   100   |     2400    |      3600       |        0        |        0        |             0                 |            0
2015-01-05 |   200   |     960     |      2160       |        0        |        0        |             0                 |            0
.
.
.
2015-01-29 |   100   |     1280    |      2200       |       1120      |      1400       |             0                 |            0
.
.
.
2015-02-06 |   200   |     0       |       0         |       0         |        0        |             960               |            2160

我需要使用SQL代码从Microsoft SQL Server 2012中的上表生成此表。我有一个日期维度来帮助计算。 我认为需要循环日期和所有生产单位以及所有可能的状态,但我很遗憾该怎么做。

如果有人能给我一些帮助,我将非常感谢!

1 个答案:

答案 0 :(得分:0)

查看PIVOT声明。要从2015-01-05 12:15:00000进入2015-01-05,您可以使用CONVERT语句。可能不需要循环。