【问题标题】:Can't get rid of duplicates无法摆脱重复
【发布时间】:2015-04-06 07:55:26
【问题描述】:

我有我的疑问:

SELECT   t.nCitiesId
    ,t.tmDate
    ,t.strShortWeekdayName
    ,t.nIsHoliday
FROM    #temp AS t
WHERE   1 = 1
AND     t.nCitiesId = 104
AND     t.tmDate = '2014-06-08'
GROUP BY t.tmDate, t.nCitiesId, t.strShortWeekdayName, t.nIsHoliday

这会产生以下结果:

nCitiesId         tmDate              strShortWeekdayName   nIsHoliday
104       2014-06-08 00:00:00.000            SUN                0
104       2014-06-08 00:00:00.000            SUN                1

我的问题是当 nCitiesId 和 tmDate 相等时,我不希望 nIsHoliday = 0 消失。

我怎样才能顺利地做到这一点?

【问题讨论】:

  • 如果您还有第三行 nIsHoliday = 0,您希望列的最终值为 0 还是 1?
  • 只要 tmDate 和 nCitiesId 相等,我只想要一行。总是。与 nIsHoliday = 1

标签: sql sql-server-2008 tsql duplicates


【解决方案1】:

选择价值最高的 t.nIsHoliday:

SELECT t.nCitiesId
      ,t.tmDate
      ,t.strShortWeekdayName
      ,max(t.nIsHoliday)
FROM   #temp AS t
WHERE  t.nCitiesId = 104
AND    t.tmDate = '2014-06-08'
GROUP BY t.nCitiesId, t.tmDate, t.strShortWeekdayName

【讨论】:

    【解决方案2】:

    尝试使用having子句:

    SELECT   t.nCitiesId
        ,t.tmDate
        ,t.strShortWeekdayName
        ,t.nIsHoliday
    FROM    #temp AS t
    WHERE   1 = 1
    AND     t.nCitiesId = 104
    AND     t.tmDate = '2014-06-08'
    GROUP BY t.tmDate, t.nCitiesId, t.strShortWeekdayName, t.nIsHoliday
    having max(t.nIsHoliday)
    

    【讨论】:

      猜你喜欢
      • 2014-09-25
      • 1970-01-01
      • 2017-07-09
      • 2018-12-16
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多