在我正在创建的系统上工作时,我试图在我的项目中使用以下查询:
SELECT WEEKLY_TOTALS.DOMAIN, WEEKLY_TOTALS.CATEGORY, DAY
FROM(
(SELECT DOMAIN,CATEGORY,DAY,CNT FROM BASE_DATA) AS DAY_CNTS
INNER JOIN
(SELECT DOMAIN,CATEGORY,SUM(CNT) AS TOT FROM BASE_DATA
GROUP BY DOMAIN,CATEGORY) AS WEEKLY_TOTALS
ON (DAY_CNTS.DOMAIN = WEEKLY_TOTALS.DOMAIN,
DAY_CNTS.CATEGORY = WEEKLY_TOTALS.CATEGORY)
)
该查询虽然给我一个错误:“#1241 - 操作数应包含1列
让我感到困惑的是,我认为这个查询不会有任何问题。选择列,然后从另一个表中再选择两个,然后从那里继续。我只是无法弄清楚问题是什么。
是否有一个简单的解决方法或其他方式来编写我的查询?
答案 0 :(得分:0)
您必须在查询中使用[DAY]代替Day:
SELECT WEEKLY_TOTALS.DOMAIN, WEEKLY_TOTALS.CATEGORY, [DAY]
FROM(
(SELECT DOMAIN,CATEGORY,[DAY],CNT FROM BASE_DATA) AS DAY_CNTS
INNER JOIN
(SELECT DOMAIN,CATEGORY,SUM(CNT) AS TOT FROM BASE_DATA
GROUP BY DOMAIN,CATEGORY) AS WEEKLY_TOTALS
ON (DAY_CNTS.DOMAIN = WEEKLY_TOTALS.DOMAIN,
DAY_CNTS.CATEGORY = WEEKLY_TOTALS.CATEGORY)
)
答案 1 :(得分:0)
您的括号已关闭,您需要子查询的表别名,并且AND
子句中需要on
而不是逗号。
事实上,你根本不需要第一个子查询:
SELECT
WEEKLY_TOTALS.DOMAIN, WEEKLY_TOTALS.CATEGORY, DAY_CNTS.DAY
FROM
BASE_DATA DAY_CNTS
INNER JOIN
(SELECT
DOMAIN, CATEGORY, SUM(CNT) AS TOT
FROM
BASE_DATA
GROUP BY
DOMAIN, CATEGORY) WEEKLY_TOTALS ON DAY_CNTS.DOMAIN = WEEKLY_TOTALS.DOMAIN
AND DAY_CNTS.CATEGORY = WEEKLY_TOTALS.CATEGORY;
此外,如果这是在SQL Server上,DAY
是一个保留字,所以应该适当地转义。