我在C#方面非常有经验,但是仍然还是SQL的初学者。 我们有一个使用MSSQL数据库的C#应用程序。 我们的应用程序的一部分只是简单地编写一系列预查询,作为报告,通过简单地运行查询并将返回的表粘贴到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,无论多么痛苦,这是否有可能做到? 如果是这样,怎么办?
您需要使用pivot。一个可能给您带来问题的问题是,由于查询永远无法返回动态数量的列(即使您正在旋转的列也是如此),因此您必须知道您拥有多少个类别。
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