[英]Pivot and unpivot a table with multiple columns and Rows in SQL
I need to output this below table as following.我需要将下表输出如下。 Below is existing database table output.
下面是现有的数据库表输出。
UNIQUE_ID PARTICULARS 18-Jan 18-Feb 18-Mar
----- ----- ----- ----- -----
1 Direct Cost 3,393 3,776 3,776
1 Quarter Q3 FY18 Q3 FY18 Q3 FY18
1 Revenue net Volume Discount 4,409 5,787 5,512
2 Direct Cost 25,022 39,178 34,143
2 Quarter Q2 FY18 Q2 FY18 Q2 FY18
2 Revenue net Volume Discount 28,730 45,507 38,247
I need to convert above table to below output.我需要将上面的表格转换为下面的输出。
UNIQUE_ID FinancialMonth Quarter DirectCost Revenue net Volume Discount
1 18-Jan Q3 FY18 3,393 4,409
1 18-Feb Q3 FY18 3,776 5,787
1 18-Mar Q3 FY18 3,776 5,512
2 18-Jan Q2 FY18 25,022 28,730
2 18-Feb Q2 FY18 39,178 45,507
2 18-Mar Q2 FY18 34,143 38,247
Could you help me on this to convert it.你能帮我转换一下吗? I have converted FinancialMonth using unpivot, but I could not convert Quarter as Column.
我已使用 unpivot 转换了FinancialMonth ,但无法将Quarter转换为 Column。
SELECT UNIQUE_ID
,PARTICULARS
,[FinancialYearMonth] AS 'FinancialMonth'
,CASE WHEN PARTICULARS='Direct Cost'
THEN [FinancialValues] END AS [DirectCost]
,CASE WHEN PARTICULARS='Revenue net Volume Discount'
THEN [FinancialValues] END AS [RevenueNetVolumeDiscount]
FROM DBO.Raw_Monthly
UNPIVOT
(
FinancialValues
FOR [FinancialYearMonth] IN(
Jan18
,[Feb18]
,[Mar18]
)
) AS unpv
In above query Quarter values are missing.在上面的查询中缺少 Quarter 值。
Both FinancialMonth and Quarter might be unpivot and pivot on same time as my understanding.根据我的理解, FinancialMonth和Quarter 都可能在同一时间处于非旋转和旋转状态。 Could you please help on this.
你能帮忙解决这个问题吗?
The tried query is missing pivoting
( Conditional Aggregation, eg case..when
clauses containing Aggregation through Grouping ) after unpivoting
.在尝试查询缺少
pivoting
(视情况而聚集,例如case..when
含有聚合通过分组子句)后unpivoting
。 Therefore, consider :因此,请考虑:
SELECT [Unique_ID], [FinancialMonth],
MAX(CASE WHEN [Particulars]='Quarter' THEN [FinancialValues] END) AS [Quarter],
MAX(CASE WHEN [Particulars]='Direct Cost' THEN [FinancialValues] END) AS [DirectCost],
MAX(CASE WHEN [Particulars]='Revenue net Volume Discount' THEN [FinancialValues]
END) AS [Revenue net Volume Discount]
FROM Raw_Monthly
UNPIVOT
(
[FinancialValues] FOR [FinancialMonth] IN ( [18-Jan] ,[18-Feb] ,[18-Mar] )
) AS unpvt
GROUP BY [Unique_ID], [FinancialMonth]
ORDER BY [Unique_ID],
CONVERT(date, REVERSE(SUBSTRING(REVERSE([FinancialMonth]),1,3))+
' 20'+ SUBSTRING(REPLACE([FinancialMonth],'-',''),1,2) , 13)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.