小编典典

SQL行值作为列名

sql

我在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,无论多么痛苦,这是否有可能做到?
如果是这样,怎么办?


阅读 284

收藏
2021-04-07

共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
2021-04-07