当前位置: 首页 > 面试题库 >

SQL行值作为列名

吕越彬
2023-03-14
问题内容

我在C#方面非常有经验,但是仍然还是SQL的初学者。
我们有一个使用MSSQL数据库的C#应用​​程序。
我们的应用程序的一部分只是简单地编写一系列预查询,作为报告,通过简单地运行查询并将返回的表粘贴到gridView即可显示该报告。用户正在请求一个新的报表,我不能完全确定仅使用SQL还是可以的,并且需要对返回的数据进行处理才能使其看起来正确。

用户想要的数据(以他们希望的方式呈现)将要求我能够使用此表:

日期类别计数
---------------------
date1猫1
date1猫2 y1
...
date1猫N z1

从此查询中获得:

select Date, Category, COUNT(*) as 'Count' 
from Table 
group by Date, Category

变成这张桌子:

日期猫1猫2 ...猫N
---------------------------
date1 | x1 | y1 | z1
date2 x2 y2 ... 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


 类似资料:
  • 问题内容: 我有一张桌子,我在其中存储合同的交易,如下所示: 用户应该能够选择查询的时间跨度,我要归档的是,如果用户从01/2012-03-2012中选择一个时间跨度,他会得到结果: 您对我有什么建议吗? 最好的问候,r3try 编辑:非常感谢您的答复!当我搜寻我的问题时,我也偶然发现了旋转问题,但是到目前为止,我还没有找到一个可以真正解决我的问题的示例(因为基本上每个示例都为列条目提供了特定的可

  • 问题内容: 我有一个带有列名称的数据表: 其中“列”包含数字值,“期间”列是具有1到48的标识列,因此有48行。 我想将此表按摩成一种格式,在该格式中,我具有“名称”列和“值”列以及“期间”列。 我想创建原始表的视图来执行此操作吗?如何选择列名称,并将其以及该列中的正确值放入NameOfVehicle和Value列中? 问题答案: 如果您有固定的列,则始终可以执行以下操作: 如果列是动态的或未知的

  • 问题内容: 我有一个旧的用户信息表(仍在使用中),并且不能更改- 时区/语言/国家等只是名称的示例,它们可以是可变的/除了该列的行上的唯一列表外,没有其他任何有限列表 我需要一个MySQL兼容的SQL查询,该查询将返回- 我已经研究了关于将数据透视表功能窃取到MySQL的关于stackoverflow的各种答案,类似的方法,但是似乎没有一个比从相同表的列的唯一行值使用变量列名别名的情况更好。尽管我

  • 问题内容: 我有一张桌子: 我还有一个包含其他用户信息的表: 该列链接到表中的列。如您所见,并非所有用户都具有相同的附加信息。爱丽丝(Alice)没有身高值,杰克(Jack)是唯一拥有眼睛颜色值等的人。 有没有一种方法可以使用和查询将该数据动态地组合到一个表中,因此结果是这样的: 如果用户没有该列的值,则它可以保持为空/空。这是否需要某种数据透视? 问题答案: 对于这种情况,您的用户信息字段是恒定

  • 问题内容: 我有一个SQL查询,给出正确的结果,但执行速度太慢。 该查询对以下三个表进行操作: 包含许多客户数据,例如姓名,地址,电话等。为简化表格,我仅使用名称。 包含某些自定义(而非客户)数据。(表是用软件创建的,这就是为什么该表的复数形式是错误的) 将自定义数据与客户相关联。 顾客 自订资料 customercustomdatarels (客户数据和自定义数据之间的关系-具有相应的值) 我想

  • 我有一个单行数据帧,如下所示 我想得到一个像下面这样的数据帧 这里的逻辑是a。将有3个包含TP/VR/TV的列名。所以在ID中,我们有1,2 我尝试了df.filter(regex='TP').stack()。我得到了所有的“TP”栏 我还想知道是否有更简单的方法来做到这一点。