【发布时间】:2017-10-16 16:40:10
【问题描述】:
我在一列中有情绪分析的结果。我想显示每个数字代表什么以及计数,如下所示:
Neg | Neutral | Pos
---------+-----+-----
30 | 55 | 100
我尝试了许多在互联网上找到的不同方法,但均无济于事。 db2 语法似乎经常更改,并且我找到的所有文档都不适用于我当前的 bluemix 帐户。
我能得到的最接近的是 UNION:
SELECT COUNT(*) as NEGATIVE FROM C7 WHERE SENTIMENT = 1
union
SELECT COUNT(*) as NEUTRAL FROM C7 WHERE SENTIMENT = 2
union
SELECT COUNT(*) as Pos FROM C7 WHERE SENTIMENT = 3
但是,这给了我:
NEGATIVE
--------
30
55
100
如何并排合并每个查询的结果?
我尝试了 Pivoting in DB2 帖子中的答案,但出现错误:
SELECT
C7.SENTIMENT,
COUNT(CASE WHEN C7.SENTIMENT = 1 THEN Value END) AS NEGATIVE,
COUNT(CASE WHEN C7.SENTIMENT = 2 THEN Value END) AS NEUTRAL,
COUNT(CASE WHEN C7.SENTIMENT = 3 THEN Value END) AS POSITIVE,
FROM C7
GROUP BY C7.SENTIMENT
SQL0206N: SQL0206N “VALUE”在使用它的上下文中无效。 SQLSTATE=42703
SELECT DISTINCT
C7.SENTIMENT,
(SELECT value FROM C7 WHERE C7.SENTIMENT = 1) AS VERY_NEGATIVE,
(SELECT value FROM C7 WHERE C7.SENTIMENT = 2) AS NEGATIVE,
(SELECT value FROM C7 WHERE C7.SENTIMENT = 3) AS NEUTRAL
FROM C7
SQL0206N: SQL0206N “VALUE”在使用它的上下文中无效。 SQLSTATE=42703
【问题讨论】:
-
Pivoting in DB2的可能重复
-
@Clockwork-Muse 不,尝试了所有这些答案,无效,将更新我的帖子,说明为什么不是这样。还是谢谢。
-
它可能认为
VALUE在这里被用作关键字(因为它是保留字,尽管它至少在某些情况下可以用作列名)。但是,除非您尝试引用的任何内容都可以为空,否则您不在乎它包含什么,因此您可以替换一个常量值(1是最喜欢的)。 (根据我的经验 column-not-found 会产生不同的异常,因此不太可能源于此) -
鉴于this other question,实际上您更有可能定义了一个您尝试使用的新本地列名称 (
<blah> as value),而您并未将其包含在语句中。如果您切换到源列,或者只是一个常量值,现有答案是否有效?
标签: db2