【发布时间】:2017-05-31 18:58:24
【问题描述】:
BUSINESSTABLE 如下所示:
HOTEL_CHAIN HOTEL_LOCATION HOTEL_OWNER
_____________________________________________________
Marriott Las Vegas Nelson
Best Western New York Richards
Best Western San Francisco Smith
Marriott New York Nelson
Hilton Boston James
我正在尝试在 DB2 数据库中执行一条 SQL 语句,该语句按 HOTEL_CHAIN 对这些条目进行分组。如果组合在一起的行包含相同的 HOTEL_LOCATION 或 HOTEL_OWNER,则应保留该信息。否则,应显示“NULL”值。例如,两家万豪酒店都有相同的所有者 Nelson,因此我想在新表中显示该信息。但是,每家万豪酒店位于不同的位置,所以我想在该列中显示“NULL”。
结果表 (HOTELTABLE) 应如下所示:
HOTEL_CHAIN HOTEL_LOCATION HOTEL_OWNER
_____________________________________________________
Marriott NULL Nelson
Best Western NULL NULL
Hilton Boston James
我正在尝试使用以下 SQL 语句来完成此操作:
INSERT INTO HOTELTABLE(HOTEL_CHAIN,HOTEL_LOCATION,HOTEL_OWNER)
SELECT
HOTEL_CHAIN,
CASE COUNT(DISTINCT(HOTEL_LOCATION)) WHEN 1 THEN HOTEL_LOCATION ELSE 'NULL' END,
CASE COUNT(DISTINCT(HOTEL_OWNER)) WHEN 1 THEN HOTEL_OWNER ELSE 'NULL' END,
FROM BUSINESSTABLE GROUP BY HOTEL_CHAIN
我收到一个 SQL 错误 SQLCODE-119 A COLUMN OR EXPRESSION IN A HAVING CLAUSE IS NOT VALID。在我的案例陈述中,它似乎在抱怨第二个 HOTEL_LOCATION 和第二个 HOTEL_OWNER。我还尝试使用 DISTINCT(HOTEL_LOCATION) 并引发另一个错误。有人可以解释一下编码的正确方法吗?谢谢!
【问题讨论】:
标签: sql group-by db2 case distinct