【发布时间】:2021-10-29 18:47:37
【问题描述】:
我有一个名为“typetxt”的列,其中包含“Late Reason”和“Notes”(以及我没有的其他值)不在乎)。我当前的查询有一个 case 语句,只选择“Late Reason”和“Notes”,并将其他所有内容设置为 NULL。
我还有一个名为“detail_value”的列,其中包含“Late Reason”或“Notes”的文本值。 'typetxt/detail_value' 的所有值都是 varchar(50)。
这就是它的样子:
| typetxt | detail_value |
|---|---|
| Late Reason | This is a late reason |
| Notes | This is a note |
这是我目前正在处理的查询的一部分。我在这之前做了几个连接,在这部分查询之后又做了 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 的情况下添加临时列或类似内容,从而使结果表看起来像这样?
| Late Reason | Notes |
|---|---|
| This is a Late Reason | NULL |
| NULL | This is a note |
如果我必须使用 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 不熟悉,并且已经对其进行了广泛的查找(也许这证明不是很深啊),但我就是无法理解这部分。感谢您的任何建议/帮助。
【问题讨论】:
-
“在选择列表中无效” 什么无效?这两个表达式在聚合函数中。
-
说我的“typetxt”在选择列表中无效。不太确定这意味着什么,我正在研究它所指的内容。可能我只是错过了该错误消息的重点。
-
想必你也有它没有聚合。语句的 sn-p 并不能告诉我们问题所在。
标签: sql sql-server pivot case