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

如何基于多日期列关联两个SQL表?查询报错排查

错误原因分析

你的JOIN条件存在语法错误:AND [App Passed] AND [Sale Completed]部分未指定与Date_Table.[Date]的比较逻辑,数据库无法解析这种孤立的列名,这是导致SQL解析报错的直接原因。


解决方案:按日期统计各销售阶段数量

以下提供两种实用方案,可根据你的具体统计需求选择:

方案1:直接关联后条件计数

无需复杂JOIN逻辑,通过COUNT(CASE...)直接统计每个日期下各阶段的记录数:

SELECT
    dt.[Date],
    -- 统计当日产生Enquiry的数量
    COUNT(CASE WHEN st.[Enquiry] = dt.[Date] THEN 1 END) AS Enquiry_Count,
    -- 统计当日收到App的数量
    COUNT(CASE WHEN st.[App Rec] = dt.[Date] THEN 1 END) AS App_Rec_Count,
    -- 统计当日App通过的数量
    COUNT(CASE WHEN st.[App Passed] = dt.[Date] THEN 1 END) AS App_Passed_Count,
    -- 统计当日完成销售的数量
    COUNT(CASE WHEN st.[Sale Completed] = dt.[Date] THEN 1 END) AS Sale_Completed_Count
FROM
    Date_Table dt
LEFT JOIN
    Sales_Table st ON 
        dt.[Date] IN (st.[Enquiry], st.[App Rec], st.[App Passed], st.[Sale Completed])
GROUP BY
    dt.[Date]
ORDER BY
    dt.[Date]

如果需要统计累计到当日的各阶段完成总量(比如到当天为止已完成App Passed的总销售数),可修改条件并配合DISTINCT避免重复计数(假设Sales_Table有唯一主键Sale_ID):

SELECT
    dt.[Date],
    COUNT(DISTINCT CASE WHEN st.[Enquiry] <= dt.[Date] THEN st.Sale_ID END) AS Cumulative_Enquiry,
    COUNT(DISTINCT CASE WHEN st.[App Rec] <= dt.[Date] THEN st.Sale_ID END) AS Cumulative_App_Rec,
    COUNT(DISTINCT CASE WHEN st.[App Passed] <= dt.[Date] THEN st.Sale_ID END) AS Cumulative_App_Passed,
    COUNT(DISTINCT CASE WHEN st.[Sale Completed] <= dt.[Date] THEN st.Sale_ID END) AS Cumulative_Sale_Completed
FROM
    Date_Table dt
LEFT JOIN
    Sales_Table st ON dt.[Date] >= st.[Enquiry]
GROUP BY
    dt.[Date]
ORDER BY
    dt.[Date]

方案2:用UNPIVOT重构销售阶段数据

将Sales_Table的多列日期转换为「阶段-日期」的行数据,再关联统计,适合后续扩展销售阶段:

WITH Sales_Stages AS (
    SELECT
        Sale_ID,
        Stage_Name,
        Stage_Date
    FROM
        Sales_Table
    UNPIVOT (
        Stage_Date FOR Stage_Name IN (
            [Enquiry], 
            [App Rec], 
            [App Passed], 
            [Sale Completed]
        )
    ) AS unpvt
)
SELECT
    dt.[Date],
    COUNT(CASE WHEN ss.Stage_Name = 'Enquiry' THEN ss.Sale_ID END) AS Enquiry_Count,
    COUNT(CASE WHEN ss.Stage_Name = 'App Rec' THEN ss.Sale_ID END) AS App_Rec_Count,
    COUNT(CASE WHEN ss.Stage_Name = 'App Passed' THEN ss.Sale_ID END) AS App_Passed_Count,
    COUNT(CASE WHEN ss.Stage_Name = 'Sale Completed' THEN ss.Sale_ID END) AS Sale_Completed_Count
FROM
    Date_Table dt
LEFT JOIN
    Sales_Stages ss ON dt.[Date] = ss.Stage_Date
GROUP BY
    dt.[Date]
ORDER BY
    dt.[Date]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:56:08