【问题标题】:How can i transpose an .csv into a sql table with an SSIS Job?如何将 .csv 转换为带有 SSIS 作业的 sql 表?
【发布时间】:2019-01-24 14:40:31
【问题描述】:

我想将 SQL 表转换为以下格式。有人能告诉我这是怎么可能的吗?我是这个话题的新手,所以我对此不太了解。我已经尝试过使用 SSIS 的 Pivot 功能,但我不会工作。

谁能告诉我一个 SQL 语句或一个 SSIS 作业来帮助我解决这个问题?

【问题讨论】:

  • 如果您有红色并想要绿色,请查看 SQL Server unpivot。如果是另一种方式,请做一个支点。

标签: sql-server tsql ssis


【解决方案1】:

不确定你是想从红色开始然后变成绿色还是相反。

无论哪种方式,您都需要PIVOT and UNPIVOT 函数。

让我们创建一些测试表来模拟您的数据

create table #_base
(
    Dt_ref  datetime 
,   Val     float
)

insert into #_base
values
 ('2018-12-16 01:00:00.000', 36.96)
,('2018-12-16 02:00:00.000', 38.81)
,('2018-12-16 03:00:00.000', 38.1)
,('2018-12-16 04:00:00.000', 38.58)
,('2018-12-16 05:00:00.000', 38.23)
,('2018-12-16 06:00:00.000', 38.42)
,('2018-12-17 01:00:00.000', 96.96)
,('2018-12-17 02:00:00.000', 98.81)
,('2018-12-17 03:00:00.000', 98.1)
,('2018-12-17 04:00:00.000', 98.58)
,('2018-12-17 05:00:00.000', 98.23)
,('2018-12-17 06:00:00.000', 98.42)

select * from #_base

让我们创建你的绿色数据集

select  cast(Dt_ref as date) as Day
    ,   datepart (hour,Dt_ref) as Hour
    ,   Val 
into #_base_green
from #_base

select * from #_base_green

如果你想从绿色转到红色,只需 PIVOT

select  Day
    ,   [1] as Hour1
    ,   [2] as Hour2
    ,   [3] as Hour3
    ,   [4] as Hour4
    ,   [5] as Hour5
    ,   [6] as Hour6
into #_result_red
from #_base_green p
pivot (
    sum(val)
    for Hour in 
    (   [1] 
    ,   [2] 
    ,   [3] 
    ,   [4] 
    ,   [5] 
    ,   [6] ) 
) as pvt

select * from #_result_red

从红到绿,UNPIVOT

select * 
into #_base_red
from #_result_red

select * from #_base_red

select  
        dateadd(hh, cast(substring(hours,5,6) as int), cast(day as datetime))
    ,   value
into #_result_green
from
(
    select Day,      Hour1
                    ,Hour2
                    ,Hour3
                    ,Hour4
                    ,Hour5
                    ,Hour6
    from #_base_red
) p
unpivot (value for Hours in (Hour1
                    ,Hour2
                    ,Hour3
                    ,Hour4
                    ,Hour5
                    ,Hour6) 
) as unpvt

select * from #_result_green

【讨论】:

    【解决方案2】:

    你可以使用unpivot变换组件

    您需要双击 Unpivot 以选择将要转换为行的列

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多