【问题标题】:SQL if there is no row, insert rowSQL 如果没有行,则插入行
【发布时间】:2014-09-27 10:14:33
【问题描述】:

前言:我有一个查询,可以根据他们的目标提取销售数据和措施。问题是只有售出商品的人才会出现在给定月份的图表上。最终,每个人​​都获得了销售并登上了排行榜。为了缓解这个问题,我创建了第二条语句,该语句分配了一个虚拟数据行(用作占位符)并将 datepart(M, SOLD_DATE) = 设置为 datepart(M, getdate()) 以便从第一个开始在板上。

我的问题:如何设置它以在人们添加到董事会时删除占位符?

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 语句为每个人添加了一个项目。现在,当有人进行销售时如何删除它是个问题。

我正在考虑某种带有“不在”或“除外”的子查询。或者可能是涉及案例陈述的事情???

我会发布完整的查询,但它是一个野兽(8 页)并使用一些 CTE 来派生顶部选择语句。

【问题讨论】:

  • 我添加了 sql-server,因为语法看起来像 SQL Server。
  • 你能在销售表中发布一个示例数据和想要的结果吗?

标签: sql sql-server union except notin


【解决方案1】:

您应该从您的用户表中进行选择,并针对您的销售表进行左连接。通过这样做,它解决了用户在没有卖东西时没有出现的原始问题。

【讨论】:

    【解决方案2】:

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

    但是,如果您想以较难的方式执行此操作,那么在添加其他销售记录时,一个简单的 if exists 就足以检查和删除虚拟记录。或者您的意思是说在添加销售的语句中应该检查、添加虚拟记录或删除虚拟记录(如果它们已经存在但正在添加销售)?好像想给我一个字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2023-03-30
      • 2018-09-17
      • 2016-04-11
      相关资源
      最近更新 更多