在“分组依据”查询中交换行和列

时间:2012-11-07 16:45:33

标签: sql sql-server ssms

我目前有以下内容:

SELECT status,count(status) AS count
  FROM [DB].[dbo].[contact]
  GROUP BY status

这给了我以下内容:

Status 1   |   12
Status 2   |   23
Status 3   |   63

我试图让表格看起来像这样:

Status 1   Status 2   Status 3  
   12        23         63

最终表格如下:

                 Status 1   Status 2   Status 3  
Date Range 1        12        23         63
Date Range 2        23        2           3       

我只是不确定现在该做什么。我应该学习什么样的SQL命令/语法才能完成这项工作?这是我第一次看SQL,所以任何指针都会很棒。

1 个答案:

答案 0 :(得分:1)

您可以使用这样的查询来获取正确格式的数据:

SELECT 
  sum(case when status = 'Status 1' then 1 else 0 end) Status1,
  sum(case when status = 'Status 2' then 1 else 0 end) Status2,
  sum(case when status = 'Status 3' then 1 else 0 end) Status3
FROM [DB].[dbo].[contact]

在SQL Server中,您甚至可以使用PIVOT函数转换数据:

select [Status 1] as Status1, 
  [Status 2] as Status2, 
  [Status 3] as Status3
from 
(
  SELECT status, status as statusToCount
  FROM [DB].[dbo].[contact]
) src
pivot
(
  count(statusToCount)
  for status in ([Status 1], [Status 2], [Status 3])
) piv