我有兩個包含以下資料的表。
studenttbl:
seatno sname coursename scoursefee
------------------------------------------
1006 Vivek MS-CIT 4500
1005 RAJESH TALLY ERP 5200
1004 Anil MS-CIT 4500
1003 ANKITA OFFICE EXPERT 4200
1002 SACHIN TALLY ERP 5200
1001 VIJAY MS-CIT 4500
feetbl:
feeid seatno receivedamt receiptno receiveddate
-----------------------------------------------------------
1 1001 2500 1001 2021-10-02 06:27:28.000
2 1002 2200 1002 2021-10-02 06:28:11.000
3 1003 2700 1003 2021-10-02 06:29:03.000
4 1003 500 1004 2021-10-02 06:32:20.000
5 1004 1500 102 2021-10-02 07:02:37.000
6 1004 1000 101 2021-10-02 07:08:03.000
7 1005 5200 103 2021-10-02 07:23:46.000
我需要找到以下資料,但我沒有得到座位號 1006 的余額值:
jdate seatno sname coursename Scoursefee paid balance
-------------------------------------------------------------------
02 Oct 2021 1005 RAJESH TALLY ERP 5200 5200 0
02 Oct 2021 1004 Anil MS-CIT 4500 2500 2000
02 Oct 2021 1003 ANKITA OFFICE EXPERT 4200 3200 1000
02 Oct 2021 1002 SACHIN TALLY ERP 5200 2200 3000
02 Oct 2021 1001 VIJAY MS-CIT 4500 2500 2000
我正在使用這個 SQL 查詢:
SELECT
CONVERT(VARCHAR, jdate, 106) AS jdate,
st.seatno,
sname,
coursename,
Scoursefee,
SUM(ft.receivedamt) AS paid,
st.Scoursefee - SUM(ft.receivedamt) AS balance
FROM
studenttbl st
INNER JOIN
feetbl ft ON st.seatno = ft.seatno
WHERE
JDate BETWEEN '1990-01-01 00:00:00'
AND '2021-10-05 00:00:00'
GROUP BY
st.seatno, st.Scoursefee, sname,
jdate, coursename, Scoursefee
ORDER BY
st.seatno DESC
請幫我解決一下這個。
uj5u.com熱心網友回復:
此問題是由 INNER JOIN 與 LEFT JOIN 造成的。當你 INNER JOIN 你只會得到兩個表之間的匹配。當您 LEFT JOIN 時,您將獲得左側表中的所有值,并且僅匹配右側表中的值。
此外,由于此問題,您的 SUM 函式將中斷。您需要將 LEFT JOIN'd 表的列包裝在 ISNULL(col,0) 中,以便您的聚合正常作業。
我還將 WHERE 子句中的日期比較更改為使用 <= 和 >=。Aaron Bertrandt 多次討論這個話題,這里有一個很好的鏈接:
https://www.mssqltips.com/sqlservertutorial/9316/sql-server-between-dates-issue/
SELECT convert(VARCHAR, jdate, 106) AS jdate
,st.seatno
,sname
,coursename
,Scoursefee
,sum(ft.receivedamt) AS paid
,st.Scoursefee - sum(ISNULL(ft.receivedamt,0)) AS balance
FROM studenttbl st
LEFT JOIN feetbl ft ON st.seatno = ft.seatno
WHERE JDate >='1990-01-01 00:00:00'
AND JDate <='2021-10-05 00:00:00'
GROUP BY st.seatno
,st.Scoursefee
,sname
,jdate
,coursename
,Scoursefee
ORDER BY st.seatno DESC
uj5u.com熱心網友回復:
這是因為座位 1006 沒有出現在 feetbl 表中。嘗試對其進行左連接,以便從 Studenttbl 中提取所有資訊。或者,將適當的資料添加到footbl 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/313295.html
標籤:sql sql-server 查询语句
