Skip to content
Advertisement

How to set succeeding row values as empty if same with previous row

How can I convert this table:

+---------------------+-------------------------------+-------+-------+
|       PropertyName  |           Emergency           | Count | Total |
+---------------------+-------------------------------+-------+-------+
| IH                  | No                            |     8 |    12 |
| IH                  | No Water                      |     1 |    12 |
| IH                  | Smoke  Alarm not working      |     1 |    12 |
| IH                  | Broken Lock - Exterior        |     1 |    12 |
| IH                  | Leaking Water                 |     1 |    12 |
| GG                  | No                            |     5 |    10 |
| GG                  | Leaking Water                 |     3 |    10 |
| GG                  | Property Damage (Significant) |     1 |    10 |
| GG                  | Toilet - Clogged (1 Bathroom) |     1 |    10 |
| PLB                 | No                            |     5 |    10 |
| PLB                 | Resident Locked Out           |     2 |    10 |
| PLB                 | Smoke  Alarm not working      |     1 |    10 |
| PLB                 | Tub - Clogged (1 Bathroom)    |     1 |    10 |
| PLB                 | Leaking Water                 |     1 |    10 |
+---------------------+-------------------------------+-------+-------+

to something like this:

+---------------------+-------------------------------+-------+-------+
|       PropertyName  |           Emergency           | Count | Total |
+---------------------+-------------------------------+-------+-------+
| IH                  | No                            |     8 |    12 |
|                     | No Water                      |     1 |       |
|                     | Smoke  Alarm not working      |     1 |       |
|                     | Broken Lock - Exterior        |     1 |       |
|                     | Leaking Water                 |     1 |       |
| GG                  | No                            |     5 |    10 |
|                     | Leaking Water                 |     3 |       |
|                     | Property Damage (Significant) |     1 |       |
|                     | Toilet - Clogged (1 Bathroom) |     1 |       |
| PLB                 | No                            |     5 |    10 |
|                     | Resident Locked Out           |     2 |       |
|                     | Smoke  Alarm not working      |     1 |       |
|                     | Tub - Clogged (1 Bathroom)    |     1 |       |
|                     | Leaking Water                 |     1 |       |
+---------------------+-------------------------------+-------+-------+

What I want to do is if the PropertyName is the same as the previous row succeeding row should be omitted. This should be the same for the Total.

I can’t try LAG/LEAD because we are only using SQL SERVER 2008 – i know it’s a bummer.

Advertisement

Answer

You can generate row numbers in a CTE expression, then select top most row numbers per PropertyName:

  ;with tableWithRowNums as( 
    select ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rownum, 
            PropertyName,
            Emergency,
            Count,
            Total
    from the_table ),
  first_rows as (
    select min(rownum) as first_row,
            PropertyName 
    from tableWithRowNums
    group by rowNums.PropertyName
  )
  select ISNULL(first_rows.PropertyName, ''),
        tableWithRowNums.Emergency,
        tableWithRowNums.Count,
        tableWithRowNums.Total  
  from tableWithRowNums
    left join first_rows on first_rows.first_row = tableWithRowNums.rownum
  order by tableWithRowNums.rownum;
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement