首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何查找sql列的值总和

如何查找sql列的值总和
EN

Stack Overflow用户
提问于 2021-10-05 17:02:07
回答 2查看 63关注 0票数 0

我有两个表,其中包含以下数据。

studenttbl

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

我需要找到以下数据,但我没有得到seatno 1006的平衡值:

代码语言:javascript
运行
复制
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查询:

代码语言:javascript
运行
复制
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

请帮我弄一下这个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-05 17:06:32

这个问题是由于内部连接和左连接造成的。当你使用内部连接时,你只能得到两个表之间的匹配。当您离开JOIN时,您将从左侧的表中获取所有值,并且仅从右侧获取匹配的值。

同样,在这个问题上,你的SUM函数也会崩溃。您需要在ISNULL(col,0)中包装左连接的表的列,这样您的聚合才能正常工作。

我还将WHERE子句中的日期比较更改为使用<=和>=。Aaron Bertrandt在这个话题上讲了几次,这里有一个很好的链接:

https://www.mssqltips.com/sqlservertutorial/9316/sql-server-between-dates-issue/

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2021-10-05 17:09:35

这是因为Seat 1006没有出现在feetbl表中。尝试对其执行左连接,以便从Studenttbl中提取所有信息。或者,将适当的数据添加到feetbl。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69454572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档