一般来说(ANSI SQL),这个任务并不简单。它取决于初始表/查询中的列数和值。以前使用 UNION ALL 的响应很好地解决了您的任务。
但只要你有 SQL server RDBMS,就有一个 PIVOT/UNVPIVOT 可以转置几乎每个表/查询:
-- suppose you have a table
CREATE TABLE Account ([ContactID] varchar(10), [FirstName] varchar(10)
, [LastName] varchar(10),[Title] varchar(10));
INSERT INTO Account VALUES
('Aaa', 'Bbb', 'Ccc','Ddd'), ('Eee', 'Fff', 'Ggg','Hhh')
, ('Qqq', 'Www', 'Rrr','Ttt'), ('Zzz', 'Xxx', 'Vvv','Nnn')
, ('Mmm', 'Sss', 'Uuu','Ooo');
结果是
SELECT * FROM
( SELECT 'Records' AS [EntityN], columnName as [Entity], columnValue
FROM [Account]
UNPIVOT
(
columnValue
FOR columnName IN (ContactID,FirstName, LastName, Title)
) unpivotQuery
) q
PIVOT
(
COUNT(columnValue)
FOR EntityN in (Records)
) pivotQuery;
查看SQL Fiddle 玩转