【问题标题】:Select rows horizontally in SQL Server 2005在 SQL Server 2005 中水平选择行
【发布时间】:2016-05-18 22:19:12
【问题描述】:

我有员工 SQL 表(SQL Sever 2005):

EmployeeID Field1 Field2
121212     MISC1  ABC
121212     MISC2  XYZ
121213     MISC1  AAA
121213     MISC2  BBB

我想显示如下结果:

EmployeeID MISC1 MISC2
121212     ABC   XYZ
121213     AAA   BBB

请提前告知并感谢您的帮助。

【问题讨论】:

  • 检查你的版本是否支持PIVOT。
  • 貌似是:technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx PIVOT 和 UNPIVOT 用于升级到 SQL Server 2005 或更高版本的数据库时,必须将数据库的兼容级别设置为 90 或更高。有关如何设置数据库兼容级别的信息,请参阅 sp_dbcmptlevel (Transact-SQL)。
  • 我之前用谷歌搜索过这个但没有帮助。还有其他想法吗?

标签: sql-server-2005


【解决方案1】:

您可以使用条件聚合来做到这一点

SELECT
    EmployeeID,
    MISC1 = MAX(CASE WHEN Field1 = 'MISC1' THEN Field2 END),
    MISC2 = MAX(CASE WHEN Field1 = 'MISC2' THEN Field2 END)
FROM tbl
GROUP BY EmployeeID 

如果你想动态地做:

DECLARE @sql NVARCHAR(MAX) = '';

SELECT @sql = 
'SELECT
    EmployeeID' + CHAR(10) +
(SELECT
'   , MAX(CASE WHEN Field1 = ''' + Field1 +''' THEN Field2 END) AS ' + QUOTENAME(Field1) + CHAR(10)
FROM (
    SELECT DISTINCT Field1 FROM tbl
)t
FOR XML PATH('')
) +
'FROM tbl
GROUP BY EmployeeID;';

EXEC(@sql);

参考:Cross Tabs and Pivots by Jeff Moden

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多