我正尝试通过SQL查询反转或透视表中追加的行。
| 时间戳|识别号|价值|
| - ------|- ------|- ------|
| 2023年1月18日|A类|十个|
| 2023年1月19日|A类|十五|
| 2023年1月20日|A类|二十个|
| 2023年1月18日|B|十个|
| 2023年1月19日|B|十五|
| 2023年1月20日|B|二十个|
| 2023年1月18日|C级|十个|
| 2023年1月19日|C级|十五|
| 2023年1月20日|C级|二十个|
并且我正在尝试修改查询以透视或分组行,等效于以下内容:
| 时间戳|A类|B|C级|
| - ------|- ------|- ------|- ------|
| 2023年1月18日|十个|十个|十个|
| 2023年1月19日|十五|十五|十五|
| 2023年1月20日|二十个|二十个|二十个|
此查询的解决方案是什么?
我试过像下面这样旋转查询,根据我的研究,它应该能达到我的期望,但可能我错过了一些东西,因为它返回了下面的错误消息。
SELECT Facility,
Site,
SUBSTRING(Name,
CHARINDEX('_',Name)+1,
( ((LEN(Name)) - CHARINDEX('_', REVERSE(Name)))
- CHARINDEX('_',Name) )
) AS Panel,
dateadd(hh,-7,TimestampUTC) as TimeStamp,
ActualValue
FROM PSS_KPIHistory
WHERE Name LIKE '%PercentLoopsInNormal'
PIVOT(ActualValue for Panel in(select distinct Panel from PSS_KPIHistory))
上述查询返回列Facility、Site、从列“Name”提取的字符串(存储为新列“Panel”)、时间戳和值(ActualValue)。我返回的是“Name”列中包含“PercentLoopsInNormal”的表中的所有内容。这将返回以下错误:
消息=关键字“PIVOT”附近的语法错误。“)”附近的语法错误。
2条答案
按热度按时间67up9zun1#
您的数据不符合您想要的结果,您可以更改它
你需要一个动态的方法来解决这个问题
| 时间戳|A类|乙|C级|
| - ------|- ------|- ------|- ------|
| 2023年1月18日|十个|十个|十个|
| 2023年1月19日|十五|十五|十五|
| 2023年1月20日|二十个|二十个|二十个|
fiddle
gzjq41n42#
以下是传统的轴心方法:
通常,步骤1需要使用窗口函数,但在本例中,您的[ID]字段已准备好供步骤2使用。
检查here演示。