Hi @Michael M.M. D'Angelo
There several ways to this issue:
First: Use aggregate functions along with Case when,just as Naomi answered.However this method need to write multiple lines of code.
Second: Use Cross Apply and Pivot,like this:
;WITH CTE AS
(
SELECT R.ClientID,R.Years,U.*
FROM Rhema_GoldExportSummary R
CROSS APPLY(VALUES(TotalGrossWeight,SUBSTRING([Month],1,3)+'_TotalGrossWeight'),
(TotalGoldNetWeightOZ,SUBSTRING([Month],1,3)+'_TotalGoldNetWeightOZ'),
(TotalSilverNetWeightOZ,SUBSTRING([Month],1,3)+'_TotalSilverNetWeightOZ'),
(TotalGoldSilverValueFunctional,SUBSTRING([Month],1,3)+'_TotalGoldSilverValueFunctional')) AS U(VALUE,TITLE)
)
SELECT * FROM CTE
PIVOT(MAX(VALUE)FOR TITLE IN([Jan_TotalGrossWeight],[Jan_TotalGoldNetWeightOZ],[Jan_TotalSilverNetWeightOZ],[Jan_TotalGoldSilverValueFunctional],
[Feb_TotalGrossWeight],[Feb_TotalGoldNetWeightOZ],[Feb_TotalSilverNetWeightOZ],[Feb_TotalGoldSilverValueFunctional],
[Mar_TotalGrossWeight],[Mar_TotalGoldNetWeightOZ],[Mar_TotalSilverNetWeightOZ],[Mar_TotalGoldSilverValueFunctional],
[Apr_TotalGrossWeight],[Apr_TotalGoldNetWeightOZ],[Apr_TotalSilverNetWeightOZ],[Apr_TotalGoldSilverValueFunctional],
[May_TotalGrossWeight],[May_TotalGoldNetWeightOZ],[May_TotalSilverNetWeightOZ],[May_TotalGoldSilverValueFunctional],
[Jun_TotalGrossWeight],[Jun_TotalGoldNetWeightOZ],[Jun_TotalSilverNetWeightOZ],[Jun_TotalGoldSilverValueFunctional],
[Jul_TotalGrossWeight],[Jul_TotalGoldNetWeightOZ],[Jul_TotalSilverNetWeightOZ],[Jul_TotalGoldSilverValueFunctional],
[Aug_TotalGrossWeight],[Aug_TotalGoldNetWeightOZ],[Aug_TotalSilverNetWeightOZ],[Aug_TotalGoldSilverValueFunctional],
[Sep_TotalGrossWeight],[Sep_TotalGoldNetWeightOZ],[Sep_TotalSilverNetWeightOZ],[Sep_TotalGoldSilverValueFunctional],
[Oct_TotalGrossWeight],[Oct_TotalGoldNetWeightOZ],[Oct_TotalSilverNetWeightOZ],[Oct_TotalGoldSilverValueFunctional],
[Nov_TotalGrossWeight],[Nov_TotalGoldNetWeightOZ],[Nov_TotalSilverNetWeightOZ],[Nov_TotalGoldSilverValueFunctional],
[Dec_TotalGrossWeight],[Dec_TotalGoldNetWeightOZ],[Dec_TotalSilverNetWeightOZ],[Dec_TotalGoldSilverValueFunctional]))P
Third:Use dynamic SQL to get column names,like this:
DECLARE @COLUMN_NAME VARCHAR(MAX)
DECLARE @SQL VARCHAR(MAX)
;WITH CTE AS
(SELECT R.*,U.*
FROM Rhema_GoldExportSummary R
CROSS APPLY(VALUES(TotalGrossWeight,SUBSTRING([Month],1,3)+'_TotalGrossWeight'),
(TotalGoldNetWeightOZ,SUBSTRING([Month],1,3)+'_TotalGoldNetWeightOZ'),
(TotalSilverNetWeightOZ,SUBSTRING([Month],1,3)+'_TotalSilverNetWeightOZ'),
(TotalGoldSilverValueFunctional,SUBSTRING([Month],1,3)+'_TotalGoldSilverValueFunctional')) AS U(VALUE,TITLE)
WHERE ClientID=40
)
SELECT @COLUMN_NAME = ISNULL(@COLUMN_NAME + ',','') +QUOTENAME(TITLE)
FROM CTE ORDER BY ID
--PRINT @COLUMN_NAME
SET @SQL = '
WITH CTE AS
(
SELECT R.ClientID,R.Years,U.*
FROM Rhema_GoldExportSummary R
CROSS APPLY(VALUES(TotalGrossWeight,SUBSTRING([Month],1,3)+''_TotalGrossWeight''),
(TotalGoldNetWeightOZ,SUBSTRING([Month],1,3)+''_TotalGoldNetWeightOZ''),
(TotalSilverNetWeightOZ,SUBSTRING([Month],1,3)+''_TotalSilverNetWeightOZ''),
(TotalGoldSilverValueFunctional,SUBSTRING([Month],1,3)+''_TotalGoldSilverValueFunctional'')) AS U(VALUE,TITLE)
)
SELECT * FROM CTE
PIVOT(MAX(VALUE)FOR TITLE IN('+ @COLUMN_NAME +'))P'
PRINT @SQL
EXEC (@SQL)
Best regards,
LiHong
If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in our Documentation to enable e-mail notifications if you want to receive the related email notification for this thread.