【问题标题】:Remove the rows that does not have incident data删除没有事件数据的行
【发布时间】:2019-07-22 09:45:27
【问题描述】:

我有如下图所示的事件数据:

.

我想根据这些条件写一个查询:

  1. 如果特定月份有基于县、站点和月份的事件数据,则应删除空事件行,如红色“X”所示

  2. 如果没有基于县、地点和日期的事件数据,则应保留空行,如绿色勾号所示

我不能使用函数或存储过程。

【问题讨论】:

  • “如图” 什么图片?但是,在您发布该图片之前,不要这样做。将数据发布为格式化 text。数据图像对您寻求帮助的志愿者没有帮助。
  • @Larnu 我编辑了帖子,这样至少人们可以同时链接到它(我故意将其保留为链接,而不是将其放在帖子中)。
  • 你能解释一下“删除”是什么意思吗?您的意思是从查询结果中删除,还是从表中完全删除?
  • @AaronBertrand 是的。当我运行 sql 查询时它不应该出现。
  • 您好,欢迎来到 SO。你的问题很可能很容易回答。但是,您没有提供任何详细信息,因此没有人真正知道问题所在。请参阅 thisthis 了解如何将其转化为其他人可以帮助您解决的问题。

标签: sql-server select duplicates sql-server-2014


【解决方案1】:

您需要CountySite、'Site Number, andDate(month), and then you wantIncidentandPriority` 的所有唯一组合的列表(如果存在)。

这是一个两步的问题。首先,生成您的唯一值列表。那是带有GROUP BY 的内部子查询。

然后将LEFT JOIN 返回基表,但仅限于存在Incident 的地方。这是ON 子句中的最后一个JOIN 条件。

结果集将仅显示它存在的 Incident 数据(摆脱您想要删除的空记录),但将为每个没有任何事件的唯一组合创建一个空记录。 COALESCE 声明只是为了使结果更漂亮。

数据设置:

DECLARE @t TABLE
  (
    County   VARCHAR(10) NOT NULL
   ,Site     VARCHAR(10) NOT NULL
   ,SiteName VARCHAR(10) NOT NULL
   ,Date     VARCHAR(6)  NOT NULL
   ,Incident VARCHAR(5)  NULL
   ,Priority CHAR(2)     NULL
  );
INSERT @t
  (
    County
   ,Site
   ,SiteName
   ,Date
   ,Incident
   ,Priority
  )
VALUES
  ('C1', 'S1', 'Sn1', 'Jan-19', 'INC3', '')
 ,('C1', 'S1', 'Sn1', 'Jan-19', '', '')
 ,('C1', 'S1', 'Sn1', 'Feb-19', 'INC2', '')
 ,('C1', 'S1', 'Sn1', 'Feb-19', 'INC1', '')
 ,('C1', 'S1', 'Sn1', 'Feb-19', '', '')
 ,('C1', 'S2', 'Sn2', 'Jan-19', '', '')
 ,('C1', 'S2', 'Sn2', 'Feb-19', '', '');

查询:

SELECT
  list.County
 ,list.Site
 ,list.SiteName
 ,list.Date
 ,COALESCE(t1.Incident, '') AS Incident
 ,COALESCE(t1.Priority, '') AS Priority
FROM
  (
    SELECT
      t.County
     ,t.Site
     ,t.SiteName
     ,t.Date
    FROM
      @t AS t
    GROUP BY
      t.County
     ,t.Site
     ,t.SiteName
     ,t.Date
  ) AS list
LEFT JOIN
  @t AS t1
    ON
    t1.County = list.County
      AND t1.Site = list.Site
      AND t1.SiteName = list.SiteName
      AND t1.Date = list.Date
      AND t1.Incident <> '';

结果:

+--------+------+----------+--------+----------+----------+
| County | Site | SiteName |  Date  | Incident | Priority |
+--------+------+----------+--------+----------+----------+
| C1     | S1   | Sn1      | Feb-19 | INC2     |          |
| C1     | S1   | Sn1      | Feb-19 | INC1     |          |
| C1     | S1   | Sn1      | Jan-19 | INC3     |          |
| C1     | S2   | Sn2      | Feb-19 |          |          |
| C1     | S2   | Sn2      | Jan-19 |          |          |
+--------+------+----------+--------+----------+----------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2015-10-20
    相关资源
    最近更新 更多