sql select查询尝试为distinct

时间:2015-02-25 18:58:36

标签: sql sql-server

Table Data 
<table border=1>
  <tr>
  <td>9Code</td><td>10Code</td><td>10Approximate</td><td>10NoMap</td><td>10Combination</td><td>10Scenario</td><td>10ChoiceList</td><td>9Approximate</td><td>9NoMap</td><td>9Combination</td>
    </tr>

<tr><td>04181</td><td>A493</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td></tr>
<tr><td>04181</td><td>A493</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>NULL</td><td>NULL</td><td>NULL</td></tr>
<tr><td>04181</td><td>B960</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>NULL</td><td>NULL</td><td>NULL</td></tr>
<tr><td>04181</td><td>B960</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td></tr>
<tr><td>04181</td><td>J200</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td></tr>
  </table>
<br><br>
Desired Table Data
<table border=1>
  <tr>
  <td>9Code</td><td>10Code</td><td>10Approximate</td><td>10NoMap</td><td>10Combination</td><td>10Scenario</td><td>10ChoiceList</td><td>9Approximate</td><td>9NoMap</td><td>9Combination</td>
    </tr>
<tr><td>04181</td><td>A493</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>NULL</td><td>NULL</td><td>NULL</td></tr>
<tr><td>04181</td><td>B960</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>NULL</td><td>NULL</td><td>NULL</td></tr>
<tr><td>04181</td><td>J200</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td></tr>
  </table>

我希望以上显示为表格。我正在尝试运行查询以选择具有不同10Code列的所有列。如果有两个重复的10Code列值,则选择一个为null的值。因此当我运行sql查询时从MyTable选择distinct([10Code])我得到了所需的结果但是当我向查询添加更多列时,例如select My([10Code]),[10Approximate]来自MyTable,我得到了所有行。我想知道如何将count [10Code]> 0的条目分组,然后显示所有列。这是困难部分 当列出现多于1次时,选择列[9Approximate] 中具有NULL值的行。

如何获取剩余的列。

我的尝试: select [10Code], COUNT([10Code]) AS NumOccurrences FROM MyTable GROUP BY [10Code] HAVING ( COUNT([10Code]) > = 1 )

1 个答案:

答案 0 :(得分:1)

当您将行数据分组从多行聚合到一个时,如果您想获得一些列,您可以提供适当的聚合函数并将列添加到分组依据。

另一种方法是通过代码将分组结果与源数据连接起来,并从适当的行中获取值:

select * from
    (
        select 10Code, COUNT(10Code) AS NumOccurrences 
        FROM test.table GROUP BY 10Code
    ) grouped
join test.table src on 
    src.10Code = grouped.10Code 
    and (src.9Approximate is null or grouped.NumOccurrences == 1)