我遇到了一個我似乎無法弄清楚的問題,也沒有在網上找到任何解決方案。
我有兩張桌子;一位與作者,一位與書籍。我需要總結資訊,但我無法讓group by條件作業或count就此而言,但我認為這是由我的問題引起的group by。
我的代碼是:
SELECT
a.ID,
a.FirstName ' ' a.LastName AS [Name],
CASE WHEN a.DeathDate IS NULL
THEN DATEDIFF(YEAR,a.BirthDate,SYSUTCDATETIME())
ELSE DATEDIFF(YEAR,a.BirthDate,a.DeathDate)
END AS [Age]
,COUNT(a.ID) AS [Books]
FROM Author a LEFT JOIN Books b ON a.ID = b.AuthorID
group by a.ID
如果我洗掉count并且group by我得到一個重復作者姓名的表格,因為有些人已經寫了幾本書,這是可以預料的。我要做的是計算他們寫的書的數量,將其添加為一列并洗掉名稱重復。
沒有group by&的表count:
| ROW | ID | Name | Age |
|-------------|------------|------------|------------|
| 1 | 1 | Adam | 50 |
| 2 | 1 | Adam | 50 |
| 3 | 2 | Sven | 36 |
| 4 | 2 | Sven | 36 |
| 5 | 3 | Eric | 82 |
| 6 | 4 | Rick | 75 |
表我希望我有:
| ROW | ID | Name | Age | Books |
|-------------|------------|------------|------------|------------|
| 1 | 1 | Adam | 50 | 2 |
| 2 | 2 | Sven | 36 | 2 |
| 3 | 3 | Eric | 82 | 1 |
| 4 | 4 | Rick | 75 | 1 |
任何人都可以幫忙嗎?
uj5u.com熱心網友回復:
相關子查詢聽起來不錯:
SELECT
a.ID,
a.FirstName ' ' a.LastName AS [Name],
CASE WHEN a.DeathDate IS NULL
THEN DATEDIFF(YEAR,a.BirthDate,SYSUTCDATETIME())
ELSE DATEDIFF(YEAR,a.BirthDate,a.DeathDate)
END AS [Age]
,q1.books_count AS [Books]
FROM
Author a
outer apply(
select count(*) as books_count
from Books b
where a.ID = b.AuthorID
) as q1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460351.html
