【问题标题】:Convert Columns into Multiple Rows [closed]将列转换为多行 [关闭]
【发布时间】:2022-10-13 00:15:14
【问题描述】:

我正在尝试将数据从 1 列获取到多行中。

样本数据:

DName   FP1   FP1% FP2  FP2%  FP3  FP3% DP1  DP1% DP2 DP2% Value
Deliv_1 Dig   50   Port 25   Risk 25   Core 50   Imp 50    10000
Deliv_2 Imp   50   Port 25   Cor  25   Risk 50   Dig 50    15000

需要输出:

DName   DPName FPName Value
Deliv_1 DP1    FP1    Value*DP1*FP1
Deliv_1 DP1    FP2    Value*DP1*FP2
Deliv_1 DP1    FP3    Value*DP1*FP3
Deliv_1 DP2    FP1    Value*DP2*FP1
Deliv_1 DP2    FP2    Value*DP2*FP2
Deliv_1 DP2    FP3    Value*DP2*FP3  
Deliv_2 DP1    FP1    Value*DP1*FP1
Deliv_2 DP1    FP2    Value*DP1*FP2
Deliv_2 DP1    FP3    Value*DP1*FP3
Deliv_2 DP2    FP1    Value*DP2*FP1
Deliv_2 DP2    FP2    Value*DP2*FP2
Deliv_2 DP2    FP3    Value*DP2*FP3  

【问题讨论】:

  • 那你试过什么代码?为什么您认为该代码无法获得预期的结果?
  • 请阅读this 以获取有关改进问题的一些提示。有东西,想要答案,不知道数据类型不是什么大问题。
  • 从来没有弄清楚为什么Deliv_2 不在“需要输出”中。

标签: sql sql-server tsql sql-server-2019


【解决方案1】:

不是 100% 清楚,但这里是使用 CROSS APPLY 的猜测

例子

Declare @YourTable Table ([DName] varchar(50),[FP1] varchar(50),[FP1%] decimal(10,2),[FP2] varchar(50),[FP2%] decimal(10,2),[FP3] varchar(50),[FP3%] decimal(10,2),[DP1] varchar(50),[DP1%] decimal(10,2),[DP2] varchar(50),[DP2%] decimal(10,2),[Value] int)  
Insert Into @YourTable Values 
 ('Deliv_1','Dig',50,'Port',25,'Risk',25,'Core',50,'Imp',50,10000)
,('Deliv_2','Imp',50,'Port',25,'Cor',25,'Risk',50,'Dig',50,15000)


Select A.DName
      ,B.*
 From @YourTable A
 Cross Apply ( Values  (DP1,FP1,Value*([DP1%]/100.0)*([FP1%]/100.0))
                      ,(DP1,FP2,Value*([DP1%]/100.0)*([FP2%]/100.0))
                      ,(DP1,FP3,Value*([DP1%]/100.0)*([FP3%]/100.0))
                      ,(DP2,FP1,Value*([DP2%]/100.0)*([FP1%]/100.0))
                      ,(DP2,FP2,Value*([DP2%]/100.0)*([FP2%]/100.0))
                      ,(DP2,FP3,Value*([DP2%]/100.0)*([FP3%]/100.0))
             ) B(DPName,FPName,Value) 

结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 2012-11-24
    • 2014-01-30
    • 2016-01-27
    • 2021-04-06
    相关资源
    最近更新 更多