gaerelva 2024-10-12 10:04 采纳率: 83.3%
浏览 5
已结题

sqlserver语句提取结果以外数据

我的数据表结构如图

img

A表是提交记录的表
B表是姓名库表

我的需求是 按月显示没提交记录的人员(排除张1),不要带参数,按表a列出所有缺失人员
并且返回三列 姓名,年,月
如下图所示

img

这个10月份我需要在最外面where过滤,类似界面的下拉列表 控制,不要带参数
请给除完整的 sql语句 ,谢谢

  • 写回答

24条回答 默认 最新

  • 叫兽-郭老师 Java领域新星创作者 2024-10-12 10:33
    关注
    获得0.45元问题酬金

    🕖上午好,题主!目前:🟢[在线]
    📢参考通义千问、由郭老师整理提供!
    📣今日诗号:水晶帘动微风起,满架蔷薇一院香。

    -- 声明一个变量来存储月份,您可以根据需要修改这个值
    DECLARE @TargetMonth int = 10;
    
    SELECT 
        b.姓名,
        YEAR(GETDATE()) AS 年, -- 获取当前年份
        @TargetMonth AS 月  -- 使用声明的月份变量
    FROM 
        B表 b
    LEFT JOIN 
        A表 a ON b.姓名 = a.姓名 AND MONTH(a.提交时间) = @TargetMonth
    WHERE 
        a.姓名 IS NULL  -- 左连接后,如果A表中没有匹配的记录,则姓名为NULL
        AND b.姓名 <> '张1' -- 排除张1
    ORDER BY 
        b.姓名;
    

    代码解释:

    1. DECLARE @TargetMonth int = 10;: 声明一个名为 @TargetMonth 的变量,并将其设置为 10,代表要查询的月份。您可以根据需要修改这个值。
    2. SELECT b.姓名, YEAR(GETDATE()) AS 年, @TargetMonth AS 月:
      • b.姓名: 从 B表 中选择姓名。
      • YEAR(GETDATE()) AS 年: 使用 GETDATE() 函数获取当前日期,然后使用 YEAR() 函数提取年份。
      • @TargetMonth AS 月: 直接使用声明的月份变量作为结果中的月份。
    3. FROM B表 b LEFT JOIN A表 a ON b.姓名 = a.姓名 AND MONTH(a.提交时间) = @TargetMonth:
      • 使用 LEFT JOINB表A表 连接起来。 LEFT JOIN 确保即使在 A表 中没有匹配的记录,B表 中的所有记录也会被返回。
      • 连接条件是 b.姓名 = a.姓名 AND MONTH(a.提交时间) = @TargetMonth,这意味着只有当姓名相同且提交时间在目标月份内的记录才会被匹配。
    4. WHERE a.姓名 IS NULL AND b.姓名 <> '张1':
      • a.姓名 IS NULL: 筛选出在 A表 中没有找到匹配记录的 B表 记录,这些记录表示没有提交记录的人员。
      • b.姓名 <> '张1': 排除姓名为 "张1" 的记录。
    5. ORDER BY b.姓名: 按照姓名对结果进行排序。

    如何使用:

    1. @TargetMonth 的值修改为您想要查询的月份。
    2. 执行 SQL 语句。

    这将返回一个包含三列的结果集:姓名、年份和月份。结果将显示在所选月份没有提交记录的所有人员(排除张1)。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月20日
  • 修改了问题 10月12日
  • 赞助了问题酬金15元 10月12日
  • 修改了问题 10月12日
  • 展开全部

悬赏问题

  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 C++行情软件的tick数据如何高效的合成K线
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战