SQL行值作为列名

时间:2010-07-12 18:53:37

标签: sql sql-server-2008

我在C#方面经验丰富,但仍然主要是SQL的初学者 我们在C#中有一个使用MSSQL数据库的应用程序 我们的应用程序的一部分只是一个预先编写的查询列表,作为应用程序通过简单地运行查询并将返回的表粘贴到gridView中而显示的报告。 用户正在请求一个新的报告,我甚至不能确定只使用SQL,并且需要操纵返回的数据才能让它看起来正确。

用户想要的数据,以他们想要的方式呈现,需要我能够拿下这张表:

Date  Category  Count
---------------------
date1 Cat1        x1
date1 Cat2        y1
...
date1 CatN        z1

从这个查询获得:

select Date, Category, COUNT(*) as 'Count' 
from Table 
group by Date, Category
变成了这张表:

Date  Cat1  Cat2  ...  CatN
---------------------------
date1 x1    y1    ...  z1
date2 x2    y2    ...  z2

这样我就可以按日期将它加入到他们想要的另一半数据中。

啰嗦的解释,简短的问题和跟进:只要有SQL,这是否可以做到,无论多么痛苦? 如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

您需要使用pivot。可能会给您带来问题的一个问题是您必须知道您有多少类别,因为查询无法返回动态数量的列(甚至不是您正在转动的列)。

我没有你的架构,但这应该是正确的(可能会在这里和那里进行一些修改,但它应该让你开始)......

select
  Date, [1] as Cat1, [2] as Cat2, [3] as Cat3, ...
from
  (select date, category from table) p
pivot (
  count(*)
for
  Category in ([1],[2],[3],...)
) pivoted
order by
  pivoted.date

答案 1 :(得分:0)

您需要查看PIVOT操作:

http://www.tsqltutorials.com/pivot.php