正如評論中指出的那樣,您應該使用唯一的列名稱。爲了實現您所需的輸出,你可以使用條件彙總:
SQL Fiddle
SELECT
Category,
SubCategory,
Region_AT = MAX(CASE WHEN Region = 'AT' THEN Region END),
Count_AT = MAX(CASE WHEN Region = 'AT' THEN [Count] END),
Percent_AT = MAX(CASE WHEN Region = 'AT' THEN [Percent] END),
Region_ON = MAX(CASE WHEN Region = 'ON' THEN Region END),
Count_ON = MAX(CASE WHEN Region = 'ON' THEN [Count] END),
Percent_ON = MAX(CASE WHEN Region = 'ON' THEN [Percent] END)
FROM Tbl
GROUP BY Category, SubCategory
如果你不知道有多少Region
s爲那裏,你可以使用動態交叉分析:
SQL Fiddle
DECLARE @sql1 NVARCHAR(2000) = '',
@sql2 NVARCHAR(2000) = '',
@sql3 NVARCHAR(2000) = ''
SELECT @sql1 =
'SELECT
Category
, SubCategory' + CHAR(10)
SELECT @sql2 = @sql2 +
' , MAX(CASE WHEN Region = ''' + Region + ''' THEN Region END) AS Region_' + Region + CHAR(10) +
' , MAX(CASE WHEN Region = ''' + Region + ''' THEN [Count] END) AS Count_' + Region + CHAR(10) +
' , MAX(CASE WHEN Region = ''' + Region + ''' THEN [Percent] END) AS Percent_' + Region + CHAR(10)
FROM(
SELECT DISTINCT Region FROM Tbl
)t
SELECT @sql3 =
'FROM Tbl
GROUP BY Category, SubCategory'
PRINT (@sql1 + @sql2 + @sql3)
EXEC (@sql1 + @sql2 + @sql3)
您可以閱讀更多關於Jeff Moden在這個偉大的article中的動態交叉表。
可能的 - 是的。一個好主意?沒那麼多。爲查詢更好地使用唯一名稱並在表示層中更改它們。 –
每個地區的唯一名稱?因爲我正在考慮用每個區域的存儲過程進行一些查詢,然後進行加入,但我不確定這是否有效。 – Nighthee