SQL行值作为列名

SQL行值作为列名,sql,sql-server-2008,Sql,Sql Server 2008,我在C语言方面很有经验,但在SQL方面基本上还是个初学者。 我们有一个C语言的应用程序,使用MSSQL数据库。 我们的应用程序的一部分只是一个预先编写的查询列表作为报告,应用程序只需运行查询并将返回的表粘贴到gridView中即可显示这些报告。 用户正在请求一个新的报告,我不完全确定仅使用SQL是否可能,并且需要对返回的数据进行操作以使其看起来正确 用户希望以他们希望的方式呈现的数据要求我能够获取以下表格: DateCategoryCount --------------------- date

我在C语言方面很有经验,但在SQL方面基本上还是个初学者。 我们有一个C语言的应用程序,使用MSSQL数据库。 我们的应用程序的一部分只是一个预先编写的查询列表作为报告,应用程序只需运行查询并将返回的表粘贴到gridView中即可显示这些报告。 用户正在请求一个新的报告,我不完全确定仅使用SQL是否可能,并且需要对返回的数据进行操作以使其看起来正确

用户希望以他们希望的方式呈现的数据要求我能够获取以下表格:

DateCategoryCount --------------------- date1Cat1x1 date1Cat2y1 ... date1CatNz1 DateCat1Cat2...CatN --------------------------- date1x1y1...z1 date2x2y2...z2 从该查询中获取:
select Date, Category, COUNT(*) as 'Count' 
from Table 
group by Date, Category
变成这张桌子:

DateCategoryCount --------------------- date1Cat1x1 date1Cat2y1 ... date1CatNz1 DateCat1Cat2...CatN --------------------------- date1x1y1...z1 date2x2y2...z2 这样我就可以按日期将它连接到他们想要的另一半数据

长篇大论的解释、简短的问题和后续行动:仅仅使用SQL就可以做到这一点吗,不管多么痛苦? 如果是,怎么做

您需要使用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

谢谢你的例子,它很有帮助,我学到了一些新的东西Pivot适用于我们大约2/3的案例,因为它们有标准的类别-但是,对于其他案例,它们是动态的,所以这是不可能的。但是,通过使用汇总,我们能够获得他们想要的所有数据。它并不像我们希望的那么漂亮,但它确实有效。