所以基本上有1个问题和1个问题:

1.问题-当我在一个表中有100列(并且没有设置键或uindex)并且我想自己连接或子选择该表时,我真的必须写出每个列的名称吗?

2.问题-以下示例显示了1.问题和我实际的SQL语句问题

例子:

A.FIELD1,
(SELECT CASE WHEN B.FIELD2 = 1 THEN B.FIELD3 ELSE null FROM TABLE B WHERE A.* = B.*) AS CASEFIELD1
(SELECT CASE WHEN B.FIELD2 = 2 THEN B.FIELD4 ELSE null FROM TABLE B WHERE A.* = B.*) AS CASEFIELD2
FROM TABLE A
GROUP BY A.FIELD1

故事是:如果我不将CASE放入其自己的select语句中,则必须将实际的行名放入GROUP BY中,GROUP BY不会将CASE中的NULL值分组,而是将CASE中的实际值分组。排。因此,由于没有键也没有uindex,所以我必须对所有列进行联接或子选择,或者以某种方式找到其他解决方案。

DBServer是DB2。

因此,现在只用单词而不用SQL来描述它:
我有“订单项”,可以分为“ZD”和“EK”(1 = ZD,2 = EK),可以按“分销商”分组。即使“订单项目”可以具有两个不同的“部门”(ZD,EK)之一,但“ZD”和“EK”的字段/行始终都被填充。我需要分组来考虑“部门”,并且仅当指定的“部门”(ZD或EK)正在更改时,才希望创建一个新的组。
SELECT
(CASE WHEN TABLE.DEPARTEMENT = 1 THEN TABLE.ZD ELSE null END) AS ZD,
(CASE WHEN TABLE.DEPARTEMENT = 2 THEN TABLE.EK ELSE null END) AS EK,
TABLE.DISTRIBUTOR,
sum(TABLE.SOMETHING) AS SOMETHING,
FROM TABLE
GROUP BY
ZD
EK
TABLE.DISTRIBUTOR
TABLE.DEPARTEMENT

这在GROUP BY的SELECT和ZD,EK中起作用。唯一的问题是,即使EK不是指定的部门,如果更改,它仍然会打开一个新组,因为他使用的是实际EK值,而不是CASE的NULL,正如我已经在上面解释过的那样。

最佳答案

在这里,女士们和先生们是解决这个问题的方法:

SELECT
(CASE WHEN TABLE.DEPARTEMENT = 1 THEN TABLE.ZD ELSE null END) AS ZD,
(CASE WHEN TABLE.DEPARTEMENT = 2 THEN TABLE.EK ELSE null END) AS EK,
TABLE.DISTRIBUTOR,
sum(TABLE.SOMETHING) AS SOMETHING,
FROM TABLE
GROUP BY
(CASE WHEN TABLE.DEPARTEMENT = 1 THEN TABLE.ZD ELSE null END),
(CASE WHEN TABLE.DEPARTEMENT = 2 THEN TABLE.EK ELSE null END),
TABLE.DISTRIBUTOR,
TABLE.DEPARTEMENT

@ t-clausen.dk:谢谢!

@其他: ...

10-04 11:21