SQL如果没有行,则插入行

时间:2014-08-04 20:40:10

标签: sql sql-server union except notin

前言:我有一个查询可以根据目标提取销售数据和衡量标准。问题是,只有已售出商品的人才会在图表上显示给定月份。最终每个人都获得了销售并获得了图表。为了缓解这个问题,我创建了一个第二个语句,它分配一个虚拟数据行(用作占位符)并使datepart(M,SOLD_DATE)=到datepart(M,getdate()),以便从第1个开始在板上。

我的问题:当人们添加到主板时,如何设置它以删除占位符?

SELECT
    USER_ID,
    SOLD_DATE,
    DATEPART(M, SALE_ID)
    **Target Case Statement in a nutshell**:
    insert monthly target value to 1st instance of sold item
    else 0
    End as 'target_amt' -- this is summed and aggregated in excel chart.
FROM 
   Sales

UNION ALL

SELECT    
    USER_ID,
    DATEPART(M, getdate()) as SOLD_DATE,
    Sale_ID,
    TARGET_AMT,
FROM 
    Sales
WHERE
    Sale_ID = **this contains on made up sale_id per person as a place holder.

所以你可以看到,从每个月的第1天开始,UNION语句为每个人添加一个项目。现在,当有人进行销售时,如何将其删除是个问题。

我正在考虑某种带有“not in”或“except”的子查询。或许涉及案例陈述的事情???

我发布了完整的查询,但它是一个野兽(8页),并使用一些CTE来推导出顶级选择语句。

2 个答案:

答案 0 :(得分:1)

您应该从您的用户表中选择并在您的销售表中左键加入。通过这样做,它解决了用户在没有出售东西时没有出现的原始问题。

答案 1 :(得分:0)

我同意SpectralGhost - 解决此问题的最佳方法是更改​​原始查询的选择条件,使其包含两个表的连接 - 没有销售的人将显示空条目。

但是,如果你想要这么做,那么一个简单的if存在就足以在添加其他销售记录时检查和删除虚拟记录。或者你是说在增加销售的陈述中应该检查,添加虚拟记录,或删除虚拟记录(如果它们已经存在但是正在添加销售)?似乎试图向我推送一个字符串。