sql - 更改sql中表的方向

标签 sql sql-server pivot

我有一个如下所示的表格:

count  occupation  gender
800    engineer     M
400    engineer     F
700    doctor       M
100    doctor       F

我希望表格看起来像

 Gender  engineer doctor
   M     800      700
   F     400      100

我怎样才能实现这一改变?

最佳答案

试试这个 -

查询:

DECLARE @temp TABLE
(
      [count] INT
    , occupation VARCHAR(20)
    , gender CHAR(1)
)

INSERT INTO @temp ([count], occupation, gender)
VALUES 
    (800, 'engineer', 'M'),
    (400, 'engineer', 'F'),
    (700, 'doctor', 'M'),
    (100, 'doctor', 'F')

SELECT *
FROM @temp
PIVOT 
(
    SUM([count]) 
    FOR occupation IN ([engineer], [doctor])
) p
ORDER BY gender DESC

输出:

gender engineer    doctor
------ ----------- -----------
M      800         700
F      400         100

更新#2:

查询:

IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
   DROP TABLE #temp

CREATE TABLE #temp
(
      [count] INT
    , occupation VARCHAR(20)
    , gender CHAR(1)
)

INSERT INTO #temp ([count], occupation, gender)
VALUES 
    (800, 'engineer', 'M'),
    (400, 'engineer', 'F'),
    (700, 'doctor', 'M'),
    (100, 'doctor', 'F'),
    (100, 'tester', 'F'),
    (100, 'programmer', 'M'),
    (100, 'programmer', 'F'),
    (100, 'programmer', 'M')

DECLARE @cols NVARCHAR(MAX)

SELECT @cols = STUFF((
    SELECT DISTINCT ', [' + occupation + ']'
    FROM #temp
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
    SELECT *
    FROM #temp
    PIVOT 
    (
        SUM([count]) 
        FOR occupation IN (' + @cols + ')
    ) p
    ORDER BY gender DESC'

PRINT @SQL
EXEC sys.sp_executesql @SQL

输出:

gender doctor      engineer    programmer  tester
------ ----------- ----------- ----------- -----------
M      700         800         200         NULL
F      100         400         100         100

关于sql - 更改sql中表的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18072216/

相关文章:

sql - 使用 Visual C# Express 连接到 SQL Server

php - 使用多个 where 子句进行删除非常慢

sql - 如何对时间段进行分组并检查休息时间

sql-server - SQL Server 全文搜索

sql - 使用 NULL 查询性能

mysql - 使用查询中给定的行数生成 SQL 查询

sql - 对于 Oracle,是否有替代 SQL*PLUS 的好方法?

mysql更新。计数,其中列为空并且列相同的行

python - 强制额外的列显示在 pandas 数据透视表中?

sql - 将多行转换为多列