水平到垂直SQL Server

时间:2019-01-28 12:52:30

标签: sql sql-server

我陷入了SQL查询(SQL Server)的问题,该查询涉及将水平行转换为垂直行 以下是我正在尝试的查询

SELECT P AS Amount_Rs 
    FROM (
Select (F1.D32-F1.D20) As Profit_For_The_Period ,F3.D2 as Current_Libilities,F5.D20 As Capital_Acount,
 --M1.Name As Name,
F2.D20 AS Loan_Liabilities,F4.d1 As Opening_Diff --F2.D68 As Loan,
 from Folio1 As F1
 --inner Join Master1 As m1 on m1.Code like '101' or m1.Code Like '102' or m1.Code Like '106' or  m1.Code Like '109' or m1.Code lIke '103'
  --And m1.Code=102  And m1.Code=101)
inner Join Folio1 As F2 On (F2.MasterCode=F2.MasterCode)
inner Join Folio1 As F3 On (F3.MasterCode=F3.MasterCode)
inner Join Folio1 As F4 On (F4.MasterCode=F4.MasterCode)
inner Join Folio1 As F5 On (F5.MasterCode=F5.MasterCode)
Where F1.MasterCode=109  
and F2.MasterCode =106
and F3.MasterCode=103 
and F4.MasterCode=102
And F5.MasterCode=101
) p UNPIVOT 
( p FOR value IN 
( Profit_For_The_Period,Capital_Acount, Current_Libilities, Loan_Liabilities, Opening_Diff ) 

) AS unvpt

当前输出:

1   12392
2     0
3     0
4   4000
5   -200

所需的输出:

1   Capital Account     12392           
2   Current Assets        0
3   Current Liabilities   0
4   Loans (Liability)    4000
5   Revenue Accounts    -200

谢谢!!!

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找枢纽。将CASE语句与SUM或SELECT部分​​中的任何聚合函数以及where子句中的group by一起使用,这是我必须在MySQL中使用的方式,将行放入查询的列中。我不知道SQL Server,但我认为您可以做的差不多。

您的以下条件

F1.MasterCode=109  
and F2.MasterCode =106
and F3.MasterCode=103 
and F4.MasterCode=102
And F5.MasterCode=101

不应在where子句中,而应在选择部分中使用大小写

示例:

select whatever, 
case when F2.MasterCode =106 then sum(column_name)
end case as column_alias, (other columns) from ...

希望这会有所帮助