0

在我正在创建的系统上工作时,我尝试在我的项目中使用以下查询:

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 列

让我难过的是,我认为这个查询不会有问题。选择列,然后从另一个表中再选择两个,然后从那里继续。我只是无法弄清楚问题是什么。

是否有一个简单的解决方法,或者另一种方法来编写我的查询?

4

2 回答 2

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)
    )
于 2014-07-23T10:33:51.597 回答
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;

In addition, if this is on SQL Server, DAY is a reserved word so it should be appropriately escaped.

于 2014-07-23T10:43:06.907 回答