You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单条带子查询的T-SQL语句实现现有两段SQL的结果?

单条SQL实现重复custprod记录查询

以下两种写法都能实现你原来两段SQL的效果:

方式一:使用窗口函数(性能更优)

窗口函数只需扫描一次表,效率更高:

SELECT 
    convert(varchar(10),custID) + '-' + convert(varchar(4),prodID) as custprod,
    *
FROM (
    SELECT 
        *,
        COUNT(*) OVER(PARTITION BY convert(varchar(10),custID) + '-' + convert(varchar(4),prodID)) AS cnt
    FROM tbl_cust
    WHERE YEAR(mdate) = 2023
) t
WHERE cnt > 1
ORDER BY custprod

方式二:使用IN子查询(与原逻辑对齐)

该写法和你原来的临时表逻辑一致,通过子查询先筛选出重复的custprod:

SELECT 
    convert(varchar(10),custID) + '-' + convert(varchar(4),prodID) as custprod,
    *
FROM tbl_cust
WHERE YEAR(mdate) = 2023
AND convert(varchar(10),custID) + '-' + convert(varchar(4),prodID) IN (
    SELECT convert(varchar(10),custID) + '-' + convert(varchar(4),prodID)
    FROM tbl_cust
    WHERE YEAR(mdate) = 2023
    GROUP BY convert(varchar(10),custID) + '-' + convert(varchar(4),prodID)
    HAVING COUNT(*) > 1
)
ORDER BY custprod

说明

  • 两种写法都会返回2023年数据中custprod重复的所有记录,排序规则和原SQL一致。
  • 子查询中务必加上YEAR(mdate) = 2023过滤条件,避免扫描全表,提升查询效率。

内容的提问来源于stack exchange,提问作者DB_B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:48:21