我需要列出作者的名字,姓氏和已售出书籍的总数量。所以实际上我需要将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'.
答案 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
试试这个。
如果此查询出错,请告诉我。