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

SQL行到列

劳麒
2023-03-14
问题内容

我在MS SQL中具有以下表结构

AirQuoteID        Name        SalesValue
7                  M          49.50
7                  N          23.10
7                 +45         233.20
7                 +100        233.20
7                 +250        2333.10

我想要一个可以返回的查询

AirQuoteID      M        N        +45        +100    +250
7               49.50    23.10    233.20     233.20   2333.10

什么是最佳解决方案。价值是动态的


问题答案:

您需要查看PIVOT运算符。

;With T As
(
SELECT 7 AirQuoteID,'M' Name,49.50 SalesValue UNION ALL
SELECT 7 AirQuoteID,'N', 23.10 UNION ALL
SELECT 7 AirQuoteID,'+45',233.20 UNION ALL
SELECT 7 AirQuoteID,'+100',233.20 UNION ALL
SELECT 7 AirQuoteID,'+250',2333.10
)
SELECT AirQuoteID, [M], [N], [+45], [+100], [+250] 
FROM T
PIVOT
(
MAX(SalesValue)
FOR Name IN ([M], [N], [+45], [+100], [+250])
) AS pvt;

但是,如果列的值不固定,则需要使用动态SQL。



 类似资料:
  • 问题内容: 寻找优雅的(或任何)解决方案以将列转换为行。 这是一个示例:我有一个具有以下架构的表: 这是我想要得到的结果: 结果值为: 等等.. 这有意义吗?您对在哪里看以及如何在T-SQL中完成操作有任何建议吗? 问题答案: 您可以使用UNPIVOT函数将列转换为行: 请注意,要取消透视的列的数据类型必须相同,因此您可能必须在应用取消透视之前转换数据类型。 您还可以与UNION ALL一起使用来

  • 问题内容: 我的查询是: 和输出: 我想将其转换为: 谢谢, 问题答案: 您将需要使用PIVOT并执行以下操作: 静态数据透视-仅需透视几列 或者,如果您有很多要发送到PIVOT的项目,则可以使用“动态数据透视表”: 两者都会给您相同的结果。

  • 问题内容: Table: 我的表有不同的数据类型,col2是nvarchar h我可以这样做吗? 结果: 问题答案: 您可以使用该操作获取结果

  • 问题内容: 我有这个.. 我想要这个… 我读了很多有关此内容的文章,但是我发现它很难实现,因为我从未使用过SQL Server 2000中没有提供游标和数据透视的功能,希望这里有人可以帮助我,谢谢。 问题答案: 由于SQL Server 2000不具有此功能,因此您应该能够使用类似于以下内容的东西: 请参见带有演示的SQL Fiddle

  • 问题内容: 假设有一个完全填充的数据String [n] [3] myData数组。 我想做这个: 显然,我已经遗漏了很多东西,但是我想尽可能简洁地表达这个想法。 有一个简单的方法可以在单个DB命令中执行此操作吗?一个不太简单的方法怎么样? 编辑:数据不是来自另一个表(这是Web表单提交-多项选择考试)。 由于该应用是面向Web的,因此必须是防注入的。参数化查询是我首选的处理方式。 我正在使用MS

  • 问题内容: 我试图将结果行转换为列,但仅使用位值。为了更好地解释我的意思,我的桌子看起来像这样; 我想要实现的是这样的布局; 抱歉我的格式不正确,但希望它能传达我想要的内容。我已经尝试过Pivot,但是我没有什么可总结的,因为我只想要true / false值而不是总和。 另外,我大约有15列,我不介意静态地将它们写出来。任何指针将不胜感激! 问题答案: 这种方法将解决此问题: 结果是: 其中1为