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条记录后检索自动增量值