【问题标题】:sql select query attempt for distinct不同的sql选择查询尝试
【发布时间】:2015-02-25 18:58:35
【问题描述】:

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 列值,则选择一个为空的值。因此,当我从 MyTable 运行 sql 查询 Select distinct([10Code]) 时,我得到了所需的结果,但是当我向查询添加更多列时,例如从 MyTable 中选择 distinct ([10Code])、[10Approximate],我得到了所有行。我想了解如何使用 count[10Code] >0 对条目进行分组,然后显示所有列。这是困难的部分当列出现超过 1 次时,选择列 [9Approximate] 中具有 NULL 值的行

我如何获得剩余的列。

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

【问题讨论】:

  • 以上不显示为表格
  • 运行代码sn -p查看表格
  • 添加了基于[...] 引用标识符的sql-server 标签

标签: sql sql-server


【解决方案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)

【讨论】:

  • 表中有 5 个条目。在条目中,其中 2 个出现 2 次,其中 1 个出现 1 次。出现 1 次的条目在 src.9Approximate 列中没有空值。我的结果中需要 3 个条目。请参阅我原来的问题中的两个表格。第二个表是期望的结果。您提供的脚本没有给出预期的结果。感谢您的尝试。
  • @userDEV,根据您的说明,我再次更新了答案
猜你喜欢
  • 2017-01-21
  • 2011-09-18
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多