【问题标题】:Select Rows with a Distinct First Column in Excel ODBC SQL在 Excel ODBC SQL 中选择具有不同第一列的行
【发布时间】:2014-12-18 01:24:06
【问题描述】:

鉴于下表,如何仅选择具有独特动物的行?

animal   age    location
-------------------------
zebra    4      africa        -->  return this row
owl      50     america       -->  return this row
owl      50     u.s.a
panda    9      china         -->  return this row

我的理解是,由于 location 具有唯一的行,因此以下内容将不起作用:

SELECT DISTINCT animal, age, location FROM table

【问题讨论】:

    标签: sql excel select odbc distinct


    【解决方案1】:

    简答 - 不可能,因为条件不严格,如何确定应该返回“owl”的哪一行?

    长答案,只要你添加一些条件,你就可以选择接近你的问题的东西,像这样:

    SELECT animal, MIN(age), MIN(location) FROM table
    GROUP BY animal
    

    在此查询中,我们选择独特的动物以及年龄和位置的最小值,请注意 - 这并不意味着会有具有此类值的行,如下所示:

    animal1, 2, location1
    animal1, 1, location2
    

    此查询将选择:

    animal1, 1, location1
    

    【讨论】:

      【解决方案2】:

      简短的回答 - 可以使用对分区表的子查询。我发现最好在您的 MS SQL 中创建一个 View 来定义分区查询,然后在您的 SELECT 语句中调用该视图。

      MS SQL 视图(例如 vw_First_Animals)将是:

      SELECT * FROM (
        SELECT *, rn=row_number() OVER (PARTITION BY [animal] ORDER by [location]) FROM [dbo].[tblAnimals] 
      ) x where rn = 1;
      

      这使您的 XL 查询,

      SELECT * FROM vw_First_Animals
      

      如果您将ORDER BY 子句重塑为视图,您可以更改交付唯一退货的顺序。

      如果不向this thread 点头,那我就失职了,它通过简单的演示帮助我处理了 PARTITION 表子查询。

      【讨论】:

      • 我似乎无法让它工作...您的代码块是否直接粘贴到 Excel“连接属性”“命令文本”SQL 查询中?我没有使用 MS Access - 只有 Excel。我正在连接到另一个 Excel 文档中的表格(例如 wikihow.com/Embed-a-SQL-Query-in-Microsoft-Excel,除非我正在连接到另一个 Excel 文档)
      • @ecoe - 我的代码块建议您在 SQL 引擎中创建一个 View,使用分区表查询将 SELECT 预先形成一个不同的列表,然后调用Excel 中的 View,而不是分区表查询。我认为 Excel 没有直接调用分区表查询的能力。
      • 有趣,如何将该视图导入 excel?您能否在您的答案中添加一些关于 Excel 如何访问该视图的内容?
      猜你喜欢
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多