【问题标题】:Selecting a Distinct value选择不同的值
【发布时间】:2012-10-26 10:16:08
【问题描述】:

当我这样做时,如果有多个列,如何在查询中选择一个不同的值我得到一个错误

 select distinct tempname,rundate from History_Table ORDER BY RunDate DESC

编辑::

我必须在我的网格视图中这样显示

Name   Rundate 
Test   DDL(to show all the rundates)
Test1  rundate

【问题讨论】:

  • 你遇到了什么错误??
  • 我没有收到错误但收到重复的名称
  • DISTINCT 适用于整组列。因此,您会得到重复的 tempname 或 rundate,但绝不会重复整行。
  • 不清楚你想要得到什么输出。你能展示一个示例所需的输出吗?
  • 问题是我必须在后面的代码中显示唯一的名称以及该名称的相关运行日期。

标签: sql sql-server


【解决方案1】:

DISTINCT 给出不同的行

似乎您需要带有一个运行日期(Last、First 等)的 tempname。这可以通过使用 GROUP BY 来实现。以下示例将给出带有最后运行日期的结果 tempname

SELECT tempname,MAX(rundate) AS rundate FROM History_Table GROUP BY tempname

您也可以使用 ORDER BY。

SELECT tempname,rundate
FROM
(SELECT tempname,MAX(rundate) AS rundate  FROM History_Table GROUP BY tempname) AS SummaryTable
ORDER BY rundate

【讨论】:

  • 但我需要获取与名称关联的所有运行日期
  • 那么您的查询有什么问题?它已经给它了。不是吗?
【解决方案2】:

您似乎想将运行日期连接成一个字符串。这可以使用 sql-server 的 xml 扩展来完成:

SELECT  t1.TempName,
        STUFF(( SELECT  ', [' + CONVERT(VARCHAR, t2.RunDate, 103) + ']'
                FROM    History_Table t2
                WHERE   t1.TempName = t2.TempName
                ORDER BY t2.RunDate
                FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') [RunDates]
FROM    (   SELECT  DISTINCT TempName
            FROM    History_Table 
        ) t1

Example SQL Fiddle

关于如何使用 XML 连接字符串的完整说明包含在另一个答案 here 中,KM's answer to another question 提供了一点帮助

【讨论】:

  • 这是我想检查一次的内容,我可以删除 [ ] 吗??
  • 去掉括号对查询没有任何影响,也不会从103(dd/MM/yyyy)改变日期格式,我只是为了让结果更清楚才加的。
  • 但问题是我必须使用此查询填写标签和下拉菜单是否有效??
  • 这是在有人选择了运行日期后将所有运行日期添加到另一个下拉列表(或类似)中吗?如果是这种情况,您要么想在后面的代码中使用 2 个查询并在数据集中定义关系,要么在后面的代码中使用一个查询和 Dictionary<string, List<DateTime>> 来处理运行日期的更改。您可能需要更新问题,或者询问新问题,详细说明您在客户端和服务器端实际尝试执行的操作。
  • 我必须将日期绑定到具有关联名称的 DDL 中。是的,会问另一个问题
【解决方案3】:

听起来您需要两个单独的查询。一个获取不同的临时名称,另一个获取运行日期。您当前的查询正确地返回了两者的不同组合。

【讨论】:

  • Prasanna 的回答听起来更像你想要的。如果不知道您想从查询中得到什么,就很难确定。
  • 如果我使用替代查询,我在后面的代码中会出错
猜你喜欢
  • 1970-01-01
  • 2015-08-17
  • 2016-01-15
  • 1970-01-01
  • 2011-12-20
  • 2012-09-22
  • 2016-05-03
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多