前言:我有一个查询可以根据目标提取销售数据和衡量标准。问题是,只有已售出商品的人才会在图表上显示给定月份。最终每个人都获得了销售并获得了图表。为了缓解这个问题,我创建了一个第二个语句,它分配一个虚拟数据行(用作占位符)并使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来推导出顶级选择语句。
答案 0 :(得分:1)
您应该从您的用户表中选择并在您的销售表中左键加入。通过这样做,它解决了用户在没有出售东西时没有出现的原始问题。
答案 1 :(得分:0)
我同意SpectralGhost - 解决此问题的最佳方法是更改原始查询的选择条件,使其包含两个表的连接 - 没有销售的人将显示空条目。
但是,如果你想要这么做,那么一个简单的if存在就足以在添加其他销售记录时检查和删除虚拟记录。或者你是说在增加销售的陈述中应该检查,添加虚拟记录,或删除虚拟记录(如果它们已经存在但是正在添加销售)?似乎试图向我推送一个字符串。