通过使用 CASE 来执行类似于 PIVOT 的操作?

问题描述 投票:0回答:1

我有一个名为“typetxt”的列,其中包含“Late Reason”和“Notes”(以及我不关心的其他值)。我当前的查询有一个 case 语句,仅选择“Late Reason”和“Notes”,并将其他所有内容设置为NULL

我还有另一列名为“detail_value”,其中包含“Late Reason”或“Notes”的文本值。 'typetxt/detail_value' 的所有值都是 varchar(50)

这就是它的样子:

输入txt 详细值
迟到原因 这是迟到的原因
注释 这是一个注释

这是我当前正在处理的查询部分。我在此之前进行了几次连接,在这部分查询之后又进行了 3 个连接:

SELECT [id], [rowid], [start_date], [data_type], [detail_value], 
       [typetxt]  = CASE
             WHEN typetxt = 'Late Reason' 
                  or typetxt= 'Notes' THEN typetxt
             ELSE NULL
            END,
       FROM mytable MT
       WHERE [start_date] IS NOT NULL AND [data_type] = 'SAS' 

有没有办法在不使用 PIVOT 的情况下添加临时列或类似的内容,以便生成的表看起来像这样?

迟到原因 注释
这是一个迟到的原因
这是一个注释

如果我必须使用 PIVOT(或动态枢轴),您可以将其添加到上面的代码中吗?我试过了

...
       FROM mytable MT
       WHERE [start_date] IS NOT NULL AND [data_type] = 'SAS' 
       PIVOT (
       *not sure what to put here* FOR 'Late Reason' IN (typetxt, detail_value)      
       ) as Late_Reason

更多搜索并阅读this

并尝试添加

 MAX(CASE WHEN [typetxt] = 'Late Reason' THEN [detail_value] END) as [Late_Reason],
 MAX(CASE WHEN [typetxt] = 'Notes' THEN [detail_value] END) as [Notes]

代替上述代码中的 PIVOT,但收到“在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中”错误消息。

尝试在我的查询的这一部分中添加 GROUP BY 但没有成功。

我对 PIVOT 不熟悉,并且已经广泛查找过它(也许这证明不是超级深啊哈哈),但我就是无法理解这部分。感谢您的任何建议/帮助。

sql sql-server pivot case sql-server-2016
1个回答
0
投票

我明白了这一点。正在使用

 MAX(CASE WHEN [typetxt] = 'Late Reason' THEN [detail_value] END) as [Late_Reason],
 MAX(CASE WHEN [typetxt] = 'Notes' THEN [detail_value] END) as [Notes]

放错地方了。

这应该出现在我的查询的顶部:

 SELECT [var1], [var2], [var3], etc
如果这有意义的话,而不是在上面显示的我的实际查询中。

© www.soinside.com 2019 - 2024. All rights reserved.