SQL Server:不确定如何检索选定的记录

Posted

技术标签:

【中文标题】SQL Server:不确定如何检索选定的记录【英文标题】:SQL Server : unsure how to retrieve selected records 【发布时间】:2013-08-12 23:19:13 【问题描述】:

在本例中,我能否使用 T-SQL 语法和单个 select 语句仅检索行 BB、DD 和 FF?

C1 | C2 | C3 | C4
-----------------
AA | KK | 11 | 99
BB | KK | 11 | 99   
CC | KK | 22 | 99
DD | KK | 22 | 99
EE | KK | 33 | 99
FF | KK | 33 | 99

好的,这就是我最终解决问题的方法:SELECT distinct [C4], [C1], [C2], [C3] FROM [Table] where [C4] = 'MyValue' order by [ C3] 描述。

【问题讨论】:

是的,你可以这样做 (select * from myTable where C1 in ('B','D','F')),但你为什么要这样做? @MikeW 谢谢你。澄清一下,我正在创建一个使用 MSSQL 作为后端的小型消息传递应用程序。当 1 人回复消息时,该组的所有其他订阅者都可以看到该消息。因此(在上面的简化示例中)我只需要为每个先前的回复(C3)检索一个回复。所以上面,C1 是消息的序列号,C2 是文本,C3 是回复的索引,C4 是对话的 ID。 (呼!)C1 始终是唯一的,其他三列包含每个给定回复的相同数据。我想使用分组依据。 为了澄清更多,我需要一个 select 语句,它只返回 C3 中每个唯一条目中的一个。不是倍数 【参考方案1】:

试一试:

SELECT C1, C2, C3, C4 FROM mytable WHERE C1 IN ('BB', 'DD', 'FF')

如果您想要唯一的 C3 列,查询应该是:

SELECT MAX(C1), C2, C3, C4 FROM mytable GROUP BY C2, C3, C4

【讨论】:

好的,这就是我最终得到的结果:SELECT distinct [C4], [C1], [C2], [C3] FROM [Table] where [C4] = 'MyValue' order by [C3] 描述【参考方案2】:

试试这个

SELECT t.C1, t.C2, t.C3, t.C4 FROM 
(
    SELECT *,
             ROW_NUMBER() OVER (PARTITION BY C3 ORDER BY C1 DESC) AS seqnum
    FROM MyTable
) t
WHERE seqnum = 1

【讨论】:

【参考方案3】:

这适用于您的特定示例:

SELECT
  C1 = MAX(C1),
  C2,
  C3,
  C4
FROM atable
GROUP BY
  C2,
  C3,
  C4
;

如果从C1 中选择正确的值应该遵循比仅获取MAX() 更复杂的逻辑,您可能需要使用@bvr's suggestion(正确调整ORDER BY 子句)。

【讨论】:

以上是关于SQL Server:不确定如何检索选定的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL Server 在一行中检索特定 id 的多条记录

如何将从 ms 访问表中检索到的记录插入到 sql server 表中?

如何在单个查询(sql server)中插入1条记录后检索自动增量值

如何在SQL Server2005数据库中检查一个表是不是存在,如存在就删除表记录,如不存在就建表.

Wt - 如何从 WTableView 中检索选定的记录?

如何在不使用 SQL Server/MS Access 的所有选定列的情况下进行分组和求和?