我有一个名为“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 不熟悉,并且已经广泛查找过它(也许这证明不是超级深啊哈哈),但我就是无法理解这部分。感谢您的任何建议/帮助。
我明白了这一点。正在使用
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
如果这有意义的话,而不是在上面显示的我的实际查询中。