创建唯一表以显示其他3个表中的不同值

时间:2016-11-11 01:59:56

标签: sql ssms

我需要列出作者的名字,姓氏和已售出书籍的总数量。所以实际上我需要将au_id连接到title_id,然后连接与他们所写的书籍相对应的销售的SUM(数量)。

我需要内联吗?我觉得这就是我收到错误的地方。 感谢

表: 作者表

+-------+----------+----------+
| au_id | au_fname | au_lname |
+-------+----------+----------+

TITLEAUTHORS TABLE

 +-------+---------
    | au_id |title_id|
    +-------+---------

SALES TABLE

 +-------+---------
    | title_id | QTY |
    +-------+---------

查询:

SELECT au_fname, au_lname, TOT FROM(
SELECT au_fname, au_lname FROM authors 
INNER JOIN titleauthors ON authors.au_id = titleauthors.au_id
INNER JOIN sales on titleauthors.title_id = sales.title_id WHERE titleauthors.title_id IN(
SELECT sales.title_id, SUM(sales.qty) TOT from sales
group by sales.title_id)) as t

错误:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Msg 207, Level 16, State 1, Line 29
Invalid column name 'TOT'.

1 个答案:

答案 0 :(得分:0)

据我所知,

join语句不能在另一个连接语句之后。

你不能那样拔出TOT。

以下是您的查询。

SELECT  A.*, TS.title_id, TS.TOT
FROM    AUTHORS A
INNER JOIN (
    SELECT  T.*, S.TOT
    FROM    TITLEAUTHORS T
    LEFT OUTER JOIN (
        SELECT   title_id, SUM( QTY ) TOT
        FROM     SALES
        GROUP BY title_id
    ) S
    ON T.title_id = S.title_id
) TS
ON A.au_id = TS.au_id

这样可行。

因为它有外连接,

TOT可以为null。您可以根据数据库使用IF或其他东西来解决这个问题。

修改

如果你想做的是每个作者的总销售额,无论title_id是什么,

然后应该更改该查询。

SELECT  A.au_fname, A.au_lname, SUM( TOT ) TOT
FROM    (
    SELECT  A.*, TS.title_id, TS.TOT
    FROM    AUTHORS A
    INNER JOIN (
        SELECT  T.*, S.TOT
        FROM    TITLEAUTHORS T
        LEFT OUTER JOIN (
            SELECT   title_id, SUM( QTY ) TOT
            FROM     SALES
            GROUP BY title_id
        ) S
        ON T.title_id = S.title_id
    ) TS
    ON A.au_id = TS.au_id
) A
GROUP BY au_id

试试这个。

如果此查询出错,请告诉我。